汇编实现多字节二进制除法运算算法
来源:互联网 发布:淘宝买东西怎么优惠 编辑:程序博客网 时间:2024/05/11 04:16
二进制的除法通过重复减法运算实现即通过重复”从被除数的高位依次取出每一位 被取出的数据加上上次的减法结果 然后减去除数”的处理 求出除法结果
假设:
被除数 R0R1 (占用4字节)
除数 R2R3 (占用4字节)
商 R0R1 (占用4字节) ******************* 这里需要说明 此程序执行
结束以后 商的结果保存在被除数中 ************
余数 R4R5 (占用4字节)
移位次数 R6L (占用1字节) ******************* 这里需要说明 其数值根据
被除数的位数定义 这里为32 *************
操作流程如下:
a) 余数清零
b) 判断除数是否为0 如果为0 是错误 不再往下执行.
c) 设定移位次数
d) 被除数左移1位 溢出的最高位保存在进位标志C中 再把余数左移1位 把C(被除数溢出的最高位)放入余数的最低位
e) 余数与除数比较大小(余数减去除数):
余数 ≧ 除数(减法结果为正)时 被除数的最低位 赋值 1
余数 < 除数(减法结果为负时 恢复到减法前的余数) 被除数的最低位 赋值 0
f) 定移位次数递减
g) 直到移位次数为0否则重复d) ~ f)
程序代码以renesas为例
MOV.W #0R4 ;clear R4
MOV.W #0R5 ;clear R5
CMP.W R4R2
BNE LBL1 ;R4R2 不相等 程序跳至LBL1
CMP.W R4R3
BEQ ERR ; R4R3 相等 程序跳至ERR
LBL1:
MOV.B #32R6L ;set byte counter
LBL2:
SHLL R1L ;被除数左移1位 最高位放入C
ROTXL R1H
ROTXL R2H
ROTXL R1H
ROTXL R5L ;余数左移1位 移入C
ROTXL R5H
ROTXL R4H
ROTXL R4H
BSET #0R1L ; 被除数的最低位 赋值 1
SUB.W R3R5 ;余数 减去 除数
SUBX.B R2LR4L
SUBX.B R2HR4H
BCC LBL3 ; 余数 ≧ 除数(减法结果为正) 程序跳至LBL3
ADD.W R3R5 ; 余数 < 除数(减法结果为负时 恢复到减法前的余数)
ADDX.B R2LR4L
ADDX.B R2HR4H
BCLR #0R1L ; 被除数的最低位 赋值 0
LBL3:
DEC.B R6L ; 定移位次数递减
BNE LBL2 ; 移位次数为不0 程序跳至LBL2
BRA EXIT ; 程序跳至EXIT
ERR: ; 添加除数为0 的处理
EXIT:
RTS
- 汇编实现多字节二进制除法运算算法
- 汇编除法运算
- 汇编算法之除法
- 【MCS-51】【A51】反汇编得到16位二进制数除法算法
- 不用‘/’ 实现除法运算
- 二进制乘除法的实现
- 用+,-,移位实现除法运算
- 用+,-,移位实现除法运算
- 二进制除法
- 二进制除法
- 二进制除法
- [算法]用位运算的方法实现无符号整数的除法原理及程序
- 练习:逻辑运算与位运算实现除法运算,加法运算
- 不用除法运算,实现A/3
- 不用除法运算,实现A/3
- C++运算符重载实现矩阵除法
- python实现无限精度除法运算
- verilog 实现无符号整数除法运算
- 浅析boost asio中的event loop (1)
- XML轻松学习手册(1)XML快速入门
- 如何用minicom传输文件
- 6410触摸屏驱动分析(s3c-ts.c)(Linux)(分析)
- js url传值java 页面url传值中文编码&解码
- 汇编实现多字节二进制除法运算算法
- addFrameScript 函数使用
- 百川纳海,移动称雄——辽宁工程技术大学2011移动开发者大会见闻
- 结构体中的位域
- 汇编算法之除法
- TORQUE引擎的GPU代码生成器
- Hessian介绍及使用说明
- C#窗体程序让textBox控件让焦点位于滚动条底部
- jira 入门