利用移位和减法的除法算法
来源:互联网 发布:网上药店软件下载 编辑:程序博客网 时间:2024/05/15 12:44
杨季文 80X86汇编语言程序 P352,子程序 DIVX ,使用移位和减法进行除法运算,
尝试举例验证之。
程序如下:
;子程序名:DIVX
;功 能:64 位数除以32 位数,商用64 位表示
;入口参数:EDX:EAX=被除数
; EBX=除数
;出口参数:EDX:EAX=商
; EBX=余数
DIVX PROC NEAR
PUSH ECX
PUSH ESI
MOV CX, 54
XOR ESI, ESI
DIV1: SHL EAX, 1 ;这3 句代码相当于把ESI,EDX,EAX
RCL EDX, 1 ;作为1 个整体向左移位
RCL ESI, 1
JC SHORT DIVX2
CMP ESI, EBX
JB SHORT DIVX3
DIVX2: SUB ESI, EBX
BTS AX, 0
DIVX3: LOOP DIVX1
MOV EBX, ESI
POP ESI
POP ECX
RET
DIVX ENDP
下面以实例跟踪验证之。
为简单,假设有寄存器,AX、BX、CX、DX、SI 都是8 bit 寄存器
CF SI DX AX CX
0 00000000 10100111 01011110 16(LOOP前)
BX
11011001
即 dx:ax=A75E,被除数 bx=D9,以计算器算之,商=C5,余数=61
根据算法,循环8 次后,
CF SI DX AX CX
0 10100111 01011110 00000000 08(LOOP前)
BX
11011001
再左移 1 bit
CF SI DX AX CX
1 01001110 10111100 00000000 08(LOOP前)
BX
11011001
执行 SUB SI, BX, BTS AX, 0
CF SI DX AX CX
0 01110101 10111100 00000001 08(LOOP前)
BX
11011001
再左移1 bit
CF SI DX AX CX
0 11101011 01111000 00000010 07(LOOP前)
BX
11011001
执行 SUB SI, BX, BTS AX, 0
CF SI DX AX CX
0 00010010 01111000 00000011 07(LOOP前)
BX
11011001
再左移4 bit
CF SI DX AX CX
1 00100111 10000000 00110000 03(LOOP前)
BX
11011001
执行 SUB SI, BX, BTS AX, 0
CF SI DX AX CX
0 01001110 10000000 00110001 03(LOOP前)
BX
11011001
再左移1 bit
CF SI DX AX CX
0 10011101 00000000 01100010 02(LOOP前)
BX
11011001
再左移1 bit
CF SI DX AX CX
1 00111010 00000000 11000100 01(LOOP前)
BX
11011001
执行 SUB SI, BX, BTS AX, 0
CF SI DX AX CX
1 01100001 00000000 11000101 01(LOOP前)
BX
11011001
到此结束,可以看出,SI 中余数是 61H,DX:AX=0C5H,与计算器结果一致。
- 利用移位和减法的除法算法
- 除法变加减和移位的实现:试探减法
- 最大公约数-减法和除法的合体,更快啊!
- 除法和乘法的移位处理
- 计算机中移位操作和乘除法的关系
- 移位实现的乘除法
- 移位实现的乘除法
- 补码的移位计算除法
- C语言 求两个数的最大公约数 (算法)--辗转相减法、辗转相除法
- 实现整数的乘法,减法和除法运算。只允许使用加号
- 关于如何利用移位运算和逻辑运算来加速算法的小技巧
- 除法运算就是移位和相减
- 除法运算就是移位和相减
- 移位,逻辑运算实现加法,乘法和除法
- 欧几里徳算法 减法与除法哪个更快-例题hdu1108
- 移位与乘除法的关系
- 用移位实现两个整数的除法
- 只使用加法实现减法,乘法和除法 [# 68]
- socket中getsockopt和setsockopt函数详解
- [转载]集成电路芯片IC封装技术的发展
- openssl编程
- C++调Python示例
- 软件质量属性
- 利用移位和减法的除法算法
- 将窗体设置在屏幕中央(java)
- 设计模式-- Model View Presenter
- 满庭芳
- ubuntu 11.04下安装rails3 开发环境
- 关于UNIX和Linux系统下SUID、SGID的解析
- WebLogic启用管理端口后使用stopWebLogic无法正常停止服务的问题
- Linux版 VMware 超强功能,Gnome 桌面完美运行 WIndows 7应用程序
- B树、B-树、B+树、B*树++ R tree总结