【问题标题】:Assembly (,%eax,4)汇编 (,%eax,4)
【发布时间】:2012-10-10 07:44:24
【问题描述】:

如果我的命令行之一说:

jmp   *0x804a180(,%eax,4)

这是什么意思?我特别问是因为第一个逗号之前没有任何值,而且我不确定地址之前的 * 到底是什么意思。

【问题讨论】:

  • 无意冒犯,但问 SO 一切意味着什么是不可扩展的。我知道 AT&T 的语法是愚蠢和令人困惑的,但它也清楚地记录在几个网站上。

标签: assembly att addressing-mode


【解决方案1】:

该指令跳转到其值位于计算为%eax * 4 + 0x804a180的地址的位置。

* 在 AT&T 语法中用于指示间接跳转和调用。它的基本意思是“跳转到 this 指向的位置,而不是 this 的值”。区分以下指令很有用:

jmp myAddress  # Jumps to the location myAddress
jmp *myPointer # Jumps to the location contained at myPointer

对于空值,它被视为0。AT&T寻址的完整形式是offset(%base, %index, multiplier),但是这些值中的任何一个都可以省略。除了乘数(默认为 1)之外,每个的默认值都是 0。大多数情况下,您可以将它们排除在外,但如果您有索引且没有基数,则需要逗号,以便汇编程序可以判断哪个是的。

【讨论】:

    猜你喜欢
    • 2013-10-05
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-26
    相关资源
    最近更新 更多