1。 添加0x4(%esp),%eax
这是否意味着在%esp中向地址添加4并将该数字添加到%eax中的内容,或者是否意味着将%4添加到%esp中存储的地址并将结果地址中的内容添加到%eax?< / p>
答案 0 :(得分:3)
后者:向esp
添加4,获取结果地址的内容,将其添加到eax
,然后存储在eax
。
在GNU语法汇编中,括号用于取消引用指针。您可以将它们视为与C中的一元*
松散相似。
在解除引用之前添加的偏移量在括号之前和之外;您还可以看到其他参数,例如4(%esp, %ecx, 4)
,这意味着在应用偏移量之前先将ecx
乘以4再加esp
。除了指令为lea
之外,所有三个额外参数(即寄存器本身被解除引用除外)都是可选的,可以省略,因此您找到的缩短版本。这不是多个机器指令的快捷方式 - 它改变了单个指令的操作,因此比数学计算偏移更有效。
有关详细信息,请参阅“寻址模式”。