汇编(,%eax,4)

arc*_*arc 4 assembly att addressing-mode

如果我的一个命令行说:

jmp   *0x804a180(,%eax,4)
Run Code Online (Sandbox Code Playgroud)

那是什么意思?我特别要求,因为在第一个逗号之前没有值,我不确定地址前的*是什么意思.

ugh*_*fhw 8

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

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

jmp myAddress  # Jumps to the location myAddress
jmp *myPointer # Jumps to the location contained at myPointer
Run Code Online (Sandbox Code Playgroud)

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