单片机 双字节除法子程序 作者: 时间: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:00H R5:05H R6:0 R7:D2H
评论