001:无符号双字节除以单字节(51单片机,汇编源码)
2011-09-22 16:50
134 查看
采用移位减法的算法。源码如下:
;////////////////////////////////////////////////////////////////////////////// ;函数: div_u16_u8 ;描述: 无符号双字节除以单字节 ;入口: (R6,R7)/(R0) ;出口: (R6,R7).(R5) ;注意: 余数在R5;OV=1时表示溢出 ;影响: A,B,R0,R5,R6,R7 div_u16_u8: mov r5,#0 mov b,#16 #ifdef __SPEED_P__ mov a,r6 ;高字节小于除数的时候,只要移位8次 jz _du168_line_03 clr c subb a,r0 jnc _du168_loop_00 mov b,#8 clr a xch a,r7 xch a,r6 xch a,r5 sjmp _du168_loop_00 _du168_line_03: mov a,r7 mov b,r0 div ab mov r7,a mov r5,b sjmp _du168_line_04 #endif _du168_loop_00: clr c mov a,r7 ;向左移位 rlc a mov r7,a mov a,r6 rlc a mov r6,a mov a,r5 rlc a mov r5,a mov F0,c ;移出位=1,或者高字节够减的时候,商+1 clr c subb a,r0 anl c,/F0 jc _du168_line_01 mov r5,a inc r7 _du168_line_01: djnz b,_du168_loop_00 _du168_line_04: mov a,r5 ;四舍五入 add a,r5 jc _du168_line_02 subb a,r0 jc return_du168 _du168_line_02: clr c mov a,#1 add a,r7 mov r7,a clr a addc a,r6 mov r6,a return_du168: mov OV,C ret
点这里下载asm文件:下载。
相关文章推荐
- 002:无符号三字节除以单字节(51单片机,汇编源码)
- 关于51单片机双字节(带有小数)无符号除法的问题
- 从U-Boot源码看C语言对汇编代码中的符号引用
- 从U-Boot源码看C语言对汇编代码中的符号引用
- 从U-Boot源码看C语言对汇编代码中的符号引用
- 四字节除以三字节无符号数除法程序
- 从U-Boot源码看C语言对汇编代码中的符号引用
- 汇编源码学习13-子函数模块-输入双字节整数
- 汇编源码学习14-子函数模块-输出双字节整数
- 从U-Boot源码看C语言对汇编代码中的符号引用
- 双字节除以单字节 汇编程序
- 用汇编程序求R6R7中的双字节有符号数的补码,并将结果存入R1R0
- 【Delphi】32位源码编译64位程序时的字节对齐问题
- 汇编语言: 试编写一段程序,从键盘接收一个-32768-32767 间的十进制有符号数,并在终端上 显示与它等值的二进制数。
- c# 完成端口模型IOCP 网络NETWORK TCP/UDP通信 常用 字节byte环绕缓冲区 FIFO 内存池 源码
- 无符号数除以非2的幂(MagicNumber有进位)
- 将一个4字节整数的二进制表示中的001替换为011
- 用51单片机汇编语言,编写“键控加减一”的程序
- 使用Xcode阅读Makefile管理的C/C++项目源码(支持调试,符号跳转,自动补全)
- 汇编源码学习12-子函数模块-输入大整数