微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 单片机 双字节除法子程序

单片机 双字节除法子程序

时间: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:00H R5:05H R6:0 R7:D2H

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top