AT& T语法中(%eax)的含义?
-
06-07-2019 - |
题
你不得不原谅我,我是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
指向的地址,结果存储到同一地址
不隶属于 StackOverflow