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:00H R5:05H R6:0 R7:D2H
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/260888.html