我们刚刚开始使用asm而我正在尝试理解我的讲师代码:
movl (%esp), %ebx
leal (%esp), %ecx
我看不出这两条指令是如何区别的,除了它们操作的寄存器。
第一个将堆栈指针指向的地址移动到寄存器BX
。
第二个将Stack Pointer指向的有效地址加载到寄存器CX
。
如果我做对了,使用两个不同的asm指令是否有任何意义,或者讲师只是试图表明它做了同样的事情?
答案 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',您必须添加更多说明。