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

发布于 2024-08-08 08:39:06 字数 421 浏览 3 评论 0原文

抱歉,我对 x86 汇编以及一般汇编是全新的。

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

addl %edx,(%eax)

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

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

我只是很困惑 addl 将在哪里存储结果。如果 %eax 是指向 int 的指针,则 (%eax) 应该是该 int 的实际值。那么addl会将%edx+(%eax)的结果存储在*xp中吗?我真的很希望有人向我解释这一点!

我真的很感谢任何帮助!

You'll have to excuse me, I'm brand new to x86 assembly, and assembly in general.

So my question is, I have something like:

addl %edx,(%eax)

%eax is a register which holds a pointer to some integer. Let's call it xp

Does this mean that it's saying: *xp = *xp + %edx? (%edx is an integer)

I'm just confused where addl will store the result. If %eax is a pointer to an int, then (%eax) should be the actual value of that int. So would addl store the result of %edx+(%eax) in *xp? I would really love for someone to explain this to me!

I really appreciate any help!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

只怪假的太真实 2024-08-15 08:39:06

是的,这条指令正在做你认为它正在做的事情。

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

addl %edx, %eax

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

这意味着eax被视为指针,因此从eax指向的地址中取出右操作数,并将结果存储到同一地址。

Yes, this instruction is doing exactly what you think it's doing.

Most x86 arithmetic instructions take two operands: a source and a destination. In AT&T syntax (used here), the destination is always the right operand. So with an instruction like:

addl %edx, %eax

the values in edx and eax are added together and the result is stored in eax. However, in your example, (%eax) is a memory operand; that's what parentheses mean in AT&T syntax (like square-brackets in NASM syntax).

This means that eax is treated as a pointer, so the right operand is taken from the address pointed to by eax, and the result is stored to the same address.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文