【问题标题】:Meaning of (%eax) in AT&T syntax?AT&T 语法中 (%eax) 的含义?
【发布时间】:2010-12-09 19:12:56
【问题描述】:

对不起,我是 x86 汇编和一般汇编的新手。

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

addl %edx,(%eax)

%eax 是一个寄存器,它保存一个指向某个整数的指针。我们就叫它xp吧

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

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

非常感谢任何帮助!

【问题讨论】:

    标签: assembly x86 addressing-mode


    【解决方案1】:

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

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

    addl %edx, %eax
    

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

    这意味着eax被当作一个指针,所以右操作数从eax指向的地址中取出,并将结果存储到同一个地址。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-25
    • 2010-12-28
    • 1970-01-01
    • 2021-08-23
    • 1970-01-01
    • 1970-01-01
    • 2021-03-28
    相关资源
    最近更新 更多