51单片机汇编能做16位数据除以8位数据的程序吗

2024-12-21 20:13:52
推荐回答(2个)
回答1:

可以转换为减法,让被除数连续减去除数,直到不够减为止。

回答2:

;****************************************
;函数名称:Div2Byte
;功能描述:无符号数双字节除法
;传入参数:R0R1被除数 R2R3除数
;返回数据:R4R5商 R6R7余数
;其他说明:比如双字节数R0R1,R0高字节 R1低字节
;****************************************
Div2Byte:
mov r0,#0ffh
mov r1,#0ffh
mov r2,#0
mov r3,#254

mov R4,#0
mov R5,#0 ;商赋初值零
mov A,R0
mov R6,A
mov A,R1
mov R7,A ;余数赋初值,保证商为零时余数正常
Div2Byte_1:
mov A,R1
clr c
subb A,R3 ;低字节相减
mov R1,A
mov A,R0
subb A,R2 ;高位相减
mov R0,A
jc Div2Byte_3 ;如果高字节都需要借位则退出循环
clr c
mov A,R5
add A,#1 ;之后JNC判断,故不用INC
mov R5,A
jnc Div2Byte_2
inc R4 ;商加1
Div2Byte_2:
mov A,R1
mov R7,A
mov A,R0
mov R6,A ;更新余数
LJMP Div2Byte_1
Div2Byte_3:
nop

END