多字节无符号二进制数除法单片机汇编程序举例
扫描二维码
随时随地手机看文章
例、 将(R2R3R4R5)除于(R6R7),商送(R4R5),余数送(R2R3)。模拟手算方法:
1)从被除数高位开始对齐除数,比较。
2)若前者大于或等于后者,商位为1,并把被除数减除数,形成部分余数。若前者小于后者,商位为0。
3)部分余数左移一位,商也左移一位。
4)整个余数若小于除数,则退出。
5)部分余数从高位开始与除数比较
6)到第2)步。
若被除数高16位大于或等于除数,则溢出。
NDIV:MOV A,R3
CLR C
SUBB A,R7 ;先比较是否发生溢出
MOV A,R2
SUBB A,R6
JNC NDVE1 ;溢出
MOV B,#16 ;无溢出,16位
NDVL1:CLR C
MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A ;被除数左移一位,同时也是商位左移一位
MOV A,R3
RLC A
MOV R3,A
MOV A,R2
RLC A
MOV R2,A
MOV F0,C ;保存移出的最高位
CLR C
MOV A,R3
SUBB A,R7 ;比较部分余数与除数
MOV R1,A
MOV A,R2
SUBB A,R6
JB F0,NDVM1 ;上次最高位=1,则商位=1
JC NDVD1 ;部分余数小于除数,则商位=0
NDVM1:MOV R2,A
MOV A,R1
MOV R3,A ;回送减法结果
INC R5 ;商位=1
NDVD1:DJNZ B,NDVL1 ;循环16次
CLR F0
RET
NDVE1:SETB F0 ;溢出标志
RET