汇编加法和减法指令代替除法指令

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

汇编加法和减法替代除法指令

针对没有乘法和除法指令的MCU,且用汇编写写代码,又要用到除法的指令。

本例是用义隆单片机EM78P372单片机,此方法可用于任何一款单片机中。

方法取名为:逐步累加比较法

概述:逐步增加除数的值,与被除数比较,直到除数的累加值等于被除数或者最接近被除数(此时存在余数)时,读取累加的次数,即为商,比如:20就是2经过10次累加得到的,所以20除于2等于10.

代码:

BEICHUSHU_D EQU 0X30;被除数低位

BEICHUSHU_G EQU 0X31;被除数高位

CHUSHU EQU 0X32;除数

CHUSHU_D EQU 0X33;比较时的累加除数

CHUSHU_G EQU 0X34;累加除数的高位

SHANG EQU 0X35;所得的商,16进制

YUSHU EQU 0X37;所得的余数

ORG 0X00

JMP MAIN

ORG 0X22

MAIN:CLR BEICHUSHU_D

CLR BEICHUSHU_G

CLR CHUSHU

CLR SHANG

CLR CHUSHU_D

CLR CHUSHU_G

SHEZHI:MOV A,@10;除于0AH

MOV CHUSHU,A

;****************被除数7FFH;由于这里只设置了一个存储商的寄存器

;所以,被除数的值不可超过:除数*256;这里只介绍方法,设置存储寄

;存器越多,则可计算可越大

MOV A,@0XFF

MOV BEICHUSHU_D,A

MOV A,@0X07

MOV BEICHUSHU_G,A

;*****************求得均值,放一个寄存器中

CALL CHUFA

MOV A,SHANG

MOV 0X16,A;将均值放于0X16

JMP $

;*******************************求均值过程

CHUFA:MOV A,CHUSHU;将除数赋值到自定的除数比较累加器中

MOV CHUSHU_D,A

INC SHANG

BIJIAO1:MOV A,BEICHUSHU_G;先比较被除数和除数累加器的高位

XOR A,CHUSHU_G

JBS 0X03,2

JMP JIA_CHUSHU;若除数累加器高位与被除数不相等,则进行除数累加器加一个除数工作

BIJIAO2:MOV A,CHUSHU_D;若高位相等,则比较低位

SUB A,BEICHUSHU_D;A所得的是余数

JBC 0X03,0

JMP JIA_CHUSHU1;如果低位被除数大于或等于除数累加器的低位

JMP FANHUI

JIA_CHUSHU1:MOV YUSHU,A;先储存余数到余数寄存器

MOV A,CHUSHU_D

XOR A,BEICHUSHU_D;比较除数累加器低位与被除数低位是否相等

JBC 0X03,2

JMP FANHUI;相等则除法运算完成,返回

MOV A,CHUSHU;不相等,则看余数是否大于除数

SUB A,YUSHU

JBS 0X03,0

JMP FANHUI;余数小于除数,则运算完成

JIA_CHUSHU:INC SHANG;商加1,除数累加器加一个除数

MOV A,CHUSHU

ADD CHUSHU_D,A

JBS 0X03,0

JMP BIJIAO1

INC CHUSHU_G;若有进位,则除数累加器高位加1

JMP BIJIAO1

FANHUI:RET

;******************************

相关文档
最新文档