Assembly 程序集(,%eax,4)

Assembly 程序集(,%eax,4),assembly,att,addressing-mode,Assembly,Att,Addressing Mode,如果我的某个命令行显示: jmp *0x804a180(,%eax,4) 这是什么意思?我这样问是因为第一个逗号前没有值,我也不确定地址前的*到底是什么意思。此指令跳转到其值位于计算为%eax*4+0x804a180的地址的位置 *在AT&T语法中用于指示间接跳转和调用。它基本上意味着“跳转到它所指向的位置,而不是它的值”。区分以下说明很有用: jmp myAddress # Jumps to the location myAddress jmp *myPointer # Jumps t

如果我的某个命令行显示:

jmp   *0x804a180(,%eax,4)

这是什么意思?我这样问是因为第一个逗号前没有值,我也不确定地址前的*到底是什么意思。

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

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

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

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

无意冒犯,但询问所有内容的含义是不可伸缩的。我知道AT&T的语法是愚蠢和令人困惑的,但它也清楚地记录在几个网站上。