汇编(,%eax,4)

时间:2012-10-19 16:32:38

标签: assembly att addressing-mode

如果我的命令行之一说:

jmp   *0x804a180(,%eax,4)
这是什么意思?我特别要求,因为在第一个逗号之前没有任何值,我不确定地址前的*是什么意思。

1 个答案:

答案 0 :(得分:8)

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

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

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.大多数情况下,你可以将它们排除在外,但是如果你有一个索引而没有基数,那么你需要逗号,以便汇编器可以知道哪个它是。