AT& T语法中(%eax)的含义?

时间:2009-10-24 21:09:47

标签: assembly x86 addressing-mode

你不得不原谅我,我是x86装配和一般装配的新手。

所以我的问题是,我有类似的东西:

addl %edx,(%eax)

%eax是一个寄存器,它包含指向某个整数的指针。我们称之为xp

这是否意味着:*xp = *xp + %edx? (%edx是一个整数)

我很困惑addl将存储结果的地方。如果%eax是指向int的指针,那么(%eax)应该是该int的实际值。那么addl会将%edx+(%eax)的结果存储在*xp中吗?我真的很想有人向我解释这个!

我真的很感激任何帮助!

1 个答案:

答案 0 :(得分:50)

是的,这条指令完全符合你的想法。

大多数x86算术指令采用两个操作数:源和目标。在AT& T语法(此处使用)中,目标始终是右操作数。所以用以下的指令:

addl %edx, %eax

edxeax中的值相加,结果存储在eax中。但是,在您的示例中,(%eax)是内存操作数;这就是AT& T语法中括号的含义(如NASM语法中的方括号)。

这意味着eax被视为指针,因此右操作数取自eax指向的地址,结果存储在同一地址。