你不得不原谅我,我是x86装配和一般装配的新手。
所以我的问题是,我有类似的东西:
addl %edx,(%eax)
%eax是一个寄存器,它包含指向某个整数的指针。我们称之为xp
这是否意味着:*xp = *xp + %edx
? (%edx
是一个整数)
我很困惑addl将存储结果的地方。如果%eax
是指向int的指针,那么(%eax)
应该是该int的实际值。那么addl
会将%edx+(%eax)
的结果存储在*xp
中吗?我真的很想有人向我解释这个!
我真的很感激任何帮助!
答案 0 :(得分:50)
是的,这条指令完全符合你的想法。
大多数x86算术指令采用两个操作数:源和目标。在AT& T语法(此处使用)中,目标始终是右操作数。所以用以下的指令:
addl %edx, %eax
将edx
和eax
中的值相加,结果存储在eax
中。但是,在您的示例中,(%eax)
是内存操作数;这就是AT& T语法中括号的含义(如NASM语法中的方括号)。
这意味着eax
被视为指针,因此右操作数取自eax
指向的地址,结果存储在同一地址。