gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 18:41:10 30 4
gpt4 key购买 nike

请原谅,我对 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

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

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

关于assembly - AT&T 语法中 (%eax) 的含义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1619131/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com