【问题标题】:What is this x86 add instruction doing?这个 x86 add 指令在做什么?
【发布时间】:2015-01-05 15:00:16
【问题描述】:

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

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

【问题讨论】:

    标签: assembly x86


    【解决方案1】:

    后者:将4加到esp,取结果地址的内容,加到eax,存入eax

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

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

    有关更多信息,您可以阅读“寻址模式”。

    【讨论】:

    • FWIW,仅供那些更熟悉它的人使用,英特尔格式为ADD EAX,[ESP+4]。我个人觉得这更具可读性。另一个示例参数是[ESP+4+ECX*4],IMO 也更具可读性。当然,仍然是 +1。
    猜你喜欢
    • 2011-11-24
    • 1970-01-01
    • 2019-11-20
    • 2015-10-15
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多