kod*_*dai 27 x86 assembly addressing-mode
你不得不原谅我,我是x86装配和一般装配的新手.
所以我的问题是,我有类似的东西:
addl %edx,(%eax)
Run Code Online (Sandbox Code Playgroud)
%eax是一个寄存器,它包含一个指向某个整数的指针.我们称之为xp
这是否意味着它说:*xp = *xp + %edx?(%edx是整数)
我很困惑addl将存储结果的地方.如果%eax是指向int的指针,那么(%eax)应该是该int的实际值.因此,将addl存储的结果%edx+(%eax)中*xp?我真的很想有人向我解释这个!
我非常感谢任何帮助!
Jay*_*rod 51
是的,这条指令完全符合你的想法.
大多数x86算术指令采用两个操作数:源和目标.在AT&T语法(此处使用)中,目标始终是正确的操作数.所以用以下指令:
addl %edx, %eax
Run Code Online (Sandbox Code Playgroud)
将edx和eax中的值相加并将结果存储在中eax.但是,在您的示例中,(%eax)是一个内存操作数; 这就是AT&T语法中括号的含义(如NASM语法中的方括号).
这意味着将eax其视为指针,因此右操作数取自指向的地址eax,并将结果存储到同一地址.