movl / leal,在这种情况下的区别

时间:2013-11-17 15:02:39

标签: assembly x86

我们刚刚开始使用asm而我正在尝试理解我的讲师代码:

movl (%esp), %ebx
leal (%esp), %ecx

我看不出这两条指令是如何区别的,除了它们操作的寄存器。

第一个将堆栈指针指向的地址移动到寄存器BX

第二个将Stack Pointer指向的有效地址加载到寄存器CX

如果我做对了,使用两个不同的asm指令是否有任何意义,或者讲师只是试图表明它做了同样的事情?

1 个答案:

答案 0 :(得分:1)

他们并不相似。

mov ebx, (esp)
lea ecx, (esp)

(在常规汇编程序中,不是气体样式)。首先使用ebx内容加载esp。第二个加载ecx本身esp。类似的“常规”表达式将是

mov ecx, esp

但是使用lea,您可以立即向ecx添加常量,寄存器或两者。如,

lea ecx, (esp+4*eax+10h)

ecx设置为esp + 4*eax + 10h - 使用'mov',您必须添加更多说明。