给你来点全面的
;被除数在r5,r6中,除数在r4中,商在r6中,余数在r3
divd:
mov r7,#16
mov r2,#00h
mov r3,#00h
divd1:
clr c
mov a,r6
rlc a
mov r6,a
mov a,r5
rlc a
mov r5,a
mov a,r3
rlc a
mov r3,a
mov a,r2
rlc a
mov r2,a
clr c
mov a,r3
subb a,r4
mov b,a
mov a,r2
subb a,#00h
jc divd2
mov r2,a
mov r3,b
inc r6
divd2:
djnz r7,divd1
ret
;******************************************************************************
;被除数在r2,r3,r4,r5中,除数在r6,r7中,双字节商在r2,r3中
divd:
mov b,#16
divd1:
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
xch a,r2
rlc a
xch a,r2
mov f0,c ;保存溢出位
clr c
subb a,r7
mov r1,a
mov a,r2
subb a,r6
anl c,/f0 ;结果判断
jc divd2
mov r2,a ;够减,存放新的余数
mov a,r1
mov r3,a
inc r5
divd2:
djnz b,divd1 ;计算完十六位商
mov a,r4 ;将商移到R2R3中
mov r2,a
mov a,r5
mov r3,a
ret
;******************************************************************************
;被除数在r2,r3,r4,r5中,除数在r6,r7中,三字节商在r3,r4,r5中,余数在temp1,r2
divd:
mov b,#24
mov temp1,#00h
divd1:
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 a,temp1
rlc a
mov temp1,a
mov f0,c ;保存溢出位
mov a,r2
clr c
subb a,r7
mov temp,a
mov a,temp1
subb a,r6
anl c,/f0 ;结果判断
jc divd2
mov temp1,a ;够减,存放新的余数
mov a,temp
mov r2,a
inc r5
divd2:
djnz b,divd1 ;计算完24位商
ret
;****************************************************************************** |