This question already has answers here:
What's the purpose of the LEA instruction?
(16个答案)
3年前关闭。
我得到了一些C代码,并且它是程序集的对等物,可用于找出
做?
(16个答案)
3年前关闭。
我得到了一些C代码,并且它是程序集的对等物,可用于找出
#define
声明的两个常量的值。我的问题是线是什么leal 0(,%eax,8),%edx
做?
最佳答案
lea
(及其大小后缀的变体)是“加载有效地址”指令。基本上,它执行地址计算:它采用与mov
相似的地址描述,但是它不访问该地址处的存储器,而只是将计算出的地址值加载到寄存器中。例如,可以使用它来获取C语言中的指针值。
由于地址描述具有高度的灵活性(任意起始基数,基数的偏移量和灵活的元素大小),并且由于lea
是快速指令,因此经常调用lea
来执行简单的算术运算。在这种情况下,lea
的使用与物理地址无关,而仅用于数学运算。通常,当所涉及的寄存器是数字值(与指针值相反)时,可以识别出这种情况。在这种情况下,lea
执行操作%edx = %eax * 8
。由于地址乘以8很少会产生有意义的地址,因此可以得出结论,此处的lea
指令只是在执行数学运算。
关于assembly - 用leal做什么线? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19438078/
10-11 15:59