lea指令如何与esp交互?

时间:2014-02-06 21:59:29

标签: assembly x86

我读过例如“lea eax,[ebp - 120]”本质上意味着

mov    eax, ebp
sub     eax, 120

给出esp位于ebp-200的示例,然后是函数

lea eax, [ebp - 120]
push eax
call xyz

这是否意味着将ebp-120的值加载到eax寄存器中,然后将这个4字节的vaule压入堆栈?或者它是否意味着esp进一步递减120,从而创建一个从ebp-200到ebp-320的缓冲区,esp现在在ebp-320?

1 个答案:

答案 0 :(得分:2)

What's the purpose of the LEA instruction?

lea看起来比mov更加花哨,但实际上它只做了mov所做的一部分:mov计算地址并取消引用内存,lea只计算地址。

在您的示例中,eax接收 ebp中存储的值,减去120,而不是存储在地址中的值,该值存储在ebp中,减去120。该值继续被推入堆栈。如果此程序集对应于C代码,则eax / stack将包含指向某个变量的指针。

lea和esp之间没有直接的互动。除非esp是lea的参数之一,否则lea不会读取或修改esp。