汇编代码中lea指令的另一种使用
来源:互联网 发布:淘宝仓库怎么看 编辑:程序博客网 时间:2024/06/15 07:36
今天看汇编代码的时候无意看到了一个lea指令的巧妙用法,觉得很有意思,有必要记录一下:
先看下面的C代码:
现在用一条lea指令可以实现上面的功能(但有些许不同之处,上面的代码修改了eax的值,flags也改变了)
先看下面的C代码:
#include<stdio.h>int b=1;int main(){ printf("%d\n",b++);}
实在没什么可说的,接着来看其汇编代码片段:
b: .long 1.LC0: .string "%d\n"main:. ............ movl b, %eax leal 1(%eax), %edx movl %edx, b subl $8, %esp pushl %eax pushl $.LC0 call printf ............b++的实现其实就是下面三行汇编语句:
movl b, %eax leal 1(%eax), %edx movl %edx, b但第二行的lea指令有点难以理解.后查阅资料得知,这是lea的一个比较tricky的用法,简单来说就是用来进行数学运算,而非求取地址.比如我们想实现把一个寄存器的值加1,然后送到另一个寄存器中:
addl $1,%eaxmovl %eax,%edx
现在用一条lea指令可以实现上面的功能(但有些许不同之处,上面的代码修改了eax的值,flags也改变了)
leal 1(%eax),%edx之前学习汇编的时候就产生过这样的疑问:在上面一条汇编指令中嵌入了数学运算,这还能在一条指令中完成?答案是可以的,原因在于1(%eax)是内存操作,占用的是cpu中Address generation unit (AGU),并没有占用arithmetic logic unit (ALU)的时钟周期.
参考资料:http://www.cnblogs.com/polymorphism/archive/2011/12/12/LEA_VS_MOV.html
0 0
- 汇编代码中lea指令的另一种使用
- 汇编指令lea
- 汇编指令LEA意义
- 汇编指令LEA
- 汇编指令lea
- 汇编 LEA指令
- 汇编中中括号[]作用以及lea和mov指令的区别
- 汇编指令1--lea和mov的区别
- 汇编lea 指令与 mov 指令
- 汇编Lea 指令与 Mov 指令
- 汇编Lea 指令与 Mov 指令
- 汇编Lea 指令与 Mov 指令区别
- 汇编Lea 指令与 Mov 指令
- 汇编 lea指令和mov指令
- 汇编Lea 指令与 Mov 指令
- 有意思的lea指令
- 学习win32汇编指令:lea和offset
- 比较汇编指令 LEA 和 MOV
- 链接器脚本lds
- 【学生信息管理系统】总结二
- android调试输出log打印信息到本地文件
- 机器学习入门学习资源
- eclipse导入tomcat 8.0x源码
- 汇编代码中lea指令的另一种使用
- TCP/IP入门(1) --链路层
- 在窗口小部件里快速设置如何默认同步关闭
- C++顺序容器笔记
- useBean、setProperty、getProperty的用法
- 蓝桥杯 算法提高 日期计算
- android studio <item/>标签下不能使用showAsAction属性
- TCP/IP入门(2) --网络层
- 使用Handler下载数据