这个x86添加指令在做什么?

时间:2014-11-09 03:22:48

标签: assembly x86

1。     添加0x4(%esp),%eax

这是否意味着在%esp中向地址添加4并将该数字添加到%eax中的内容,或者是否意味着将%4添加到%esp中存储的地址并将结果地址中的内容添加到%eax?< / p>

1 个答案:

答案 0 :(得分:3)

后者:向esp添加4,获取结果地址的内容,将其添加到eax,然后存储在eax

在GNU语法汇编中,括号用于取消引用指针。您可以将它们视为与C中的一元*松散相似。

在解除引用之前添加的偏移量在括号之前和之外;您还可以看到其他参数,例如4(%esp, %ecx, 4),这意味着在应用偏移量之前先将ecx乘以4再加esp。除了指令为lea之外,所有三个额外参数(即寄存器本身被解除引用除外)都是可选的,可以省略,因此您找到的缩短版本。这不是多个机器指令的快捷方式 - 它改变了单个指令的操作,因此比数学计算偏移更有效。

有关详细信息,请参阅“寻址模式”。