新闻中心

EEPW首页>嵌入式系统>设计应用> 单片机 双字节除法子程序

单片机 双字节除法子程序

作者: 时间:2016-11-23 来源:网络 收藏
8位MCU实现双字节除法子程序

51单片机只是8位的,但有时候需要实现双字节除法,里面的指令只支持8位。
想来想去,只好用减法来实现了。下面这个子程序是双字节除以双字节,商、余数结果都是双字节保存,可能有点消耗资源,但这样可以整合在一块。
;****************************************
;函数名称:Div2Byte
;功能描述:无符号数双字节除法
;传入参数:R0R1被除数 R2R3除数
;返回数据:R4R5商R6R7余数
;其他说明:比如双字节数R0R1,R0高字节 R1低字节
;****************************************
Div2Byte:
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;为什么这里不直接使用INC R5????????
add A,#1
mov R5,A
jnc Div2Byte_2
inc R4;商加一
Div2Byte_2:
mov A,R1
mov R7,A
mov A,R0
mov R6,A;更新余数
LJMP Div2Byte_1
Div2Byte_3:
RET
使用示范:
16进制双字节数字 05D2H 除以 0105H,商是0005H,余数是00D2H
mov R0,#5H
mov R1,#0D2H
mov R2,#1H
mov R3,#5H
lcall Div2Byte
则结果是 R4:00HR5:05HR6:0 R7:D2H


评论


技术专区

关闭