您的位置:首页 > 其它

001:无符号双字节除以单字节(51单片机,汇编源码)

2011-09-22 16:50 134 查看
采用移位减法的算法。源码如下:


;//////////////////////////////////////////////////////////////////////////////
;函数:    div_u16_u8
;描述:    无符号双字节除以单字节
;入口:    (R6,R7)/(R0)
;出口:    (R6,R7).(R5)
;注意:    余数在R5;OV=1时表示溢出
;影响:    A,B,R0,R5,R6,R7
div_u16_u8:    mov    r5,#0
mov    b,#16
#ifdef __SPEED_P__
mov    a,r6        ;高字节小于除数的时候,只要移位8次
jz    _du168_line_03
clr    c
subb    a,r0
jnc    _du168_loop_00

mov    b,#8
clr    a
xch    a,r7
xch    a,r6
xch    a,r5
sjmp    _du168_loop_00

_du168_line_03:    mov    a,r7
mov    b,r0
div    ab
mov    r7,a
mov    r5,b
sjmp    _du168_line_04
#endif
_du168_loop_00:    clr    c

mov    a,r7        ;向左移位
rlc    a
mov    r7,a

mov    a,r6
rlc    a
mov    r6,a

mov    a,r5
rlc    a
mov    r5,a

mov    F0,c               ;移出位=1,或者高字节够减的时候,商+1
clr    c
subb    a,r0
anl    c,/F0
jc    _du168_line_01
mov    r5,a
inc    r7
_du168_line_01:    djnz    b,_du168_loop_00

_du168_line_04:    mov    a,r5        ;四舍五入
add    a,r5
jc    _du168_line_02
subb    a,r0
jc    return_du168
_du168_line_02:    clr    c
mov    a,#1
add    a,r7
mov    r7,a
clr    a
addc    a,r6
mov    r6,a

return_du168:    mov    OV,C
ret


点这里下载asm文件:下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: