汇编加法和减法指令代替除法指令
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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
;******************************