汇编除法转换
来源:互联网 发布:淘宝网水兵舞裙子 编辑:程序博客网 时间:2024/05/21 20:20
今天写了个小程序,用 IDA 反汇编过来看了一下,如下一条语句:
num/= 5;
却被转化成了这种形式:
mov ecx, eax ;num
mov eax, 66666667h
imul ecx
sar edx, 1
num/5 = num*(1/5)= (num*(2/5))/2
num/= 5;
却被转化成了这种形式:
mov ecx, eax ;num
mov eax, 66666667h
imul ecx
sar edx, 1
mov eax, edx
最终 eax 就是 num 的值,为什么会是这种形式呢?查了一下资料:原来除法运算比较花时间,所以除法会转换成等效的乘法或移位操作。对于上述代码来说:
num/5 = num*(1/5)= (num*(2/5))/2
把 eax = 66666667h 看成小数部分,即 6/15 = 2/5,这样就对应起来了。很巧妙啊!
============================================================================
例子:
; 26 : digit = n % 10;moveax, 1717986919; 66666667Himulesisaredx, 2moveax, edxshreax, 31; 0000001fHaddeax, edxmovedx, esileaecx, DWORD PTR [eax+eax*4]addecx, ecxsubedx, ecx
- 汇编除法转换
- 汇编中的除法指令
- 汇编除法优化~
- 【汇编】dword型除法
- 汇编算法之除法
- 汇编除法运算
- 8086汇编不溢出除法
- 汇编中防止除法溢出
- 汇编中除法的问题
- 乘法、除法汇编指令总结
- 32位除法转换
- 乘法和除法的汇编形式
- 高精度整数除法(MIPS汇编)
- 高精度整数除法(MIPS汇编)
- 编写无溢出除法的汇编子程序
- 编写无溢出除法的汇编子程序
- 汇编中的除法溢出的解决
- 汇编idiv带符合除法指令。。。。
- 关于JS中的constructor与prototype .
- C++程序设计实验报告(七十九)---第十六周任务一
- MySQL体系结构和存储引擎
- Jquery常用事件
- GL_PROJECTION和GL_MODELVIEW的作用
- 汇编除法转换
- Facebook股价之“殇”
- linux 块I/O层 自学报告
- SVN权限详解
- C++程序设计实验报告(八十)---第十六周任务二
- ACE入门---很好的文章
- 【Andorid应用开发】-(3)性能优化设计
- ByteArrayOutputStream&ByteArrayInputStream
- Uboot命令使用