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

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

addl %edx,(%eax)

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

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

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

我真的很感激任何帮助!

有帮助吗?

解决方案

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

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

addl %edx, %eax

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

这意味着 eax 被视为指针,所以右操作数取自 eax 指向的地址,结果存储到同一地址

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top