【问题标题】:What do the dollar ($) and percentage (%) signs represent in x86 assembly?x86 汇编中的美元 ($) 和百分比 (%) 符号代表什么?
【发布时间】:2012-03-01 02:02:28
【问题描述】:

我正在尝试了解汇编语言如何用于微型计算机体系结构类,并且在示例中我一直面临不同的语法:

sub $48, %esp
mov %eax, 32(%esp)

这些代码是什么意思? esp寄存器的32个操作数是什么?

【问题讨论】:

    标签: assembly x86 att


    【解决方案1】:

    这不是 Intel 语法,它的 AT&T syntax,也称为 GAS syntax

    $ 前缀用于立即数(常量),% 前缀用于寄存器(它们是必需的1)。

    有关 AT&T 语法的更多信息,另请参阅 the [att] tag wiki


    1 除非指定了noprefix 选项,否则请参阅herehere。但通常noprefix 只与.intel_syntax noprefix 一起使用,以获得类似MASM 的语法。

    【讨论】:

    【解决方案2】:

    与 Intel 语法相比,AT&T 语法有很多不同

    • $ 表示一个常量(整数文字)。没有它,数字是一个绝对地址
    • % 表示寄存器
    • 源/目标顺序颠倒了
    • () 用于内存引用,如 Intel 语法中的 []

    所以上面的sn-p等价于

    sub esp, 48         ; esp -= 48
    mov [esp+32], eax   ; store eax to the value at the address `esp + 32`
    

    【讨论】:

    • 嗨 - 我不确定这是否真的回答了这个问题...... $ 和 % 是什么?
    • @TarynEast 它们是 Necrolis 所说的 immidiates 和 registers 的前缀
    • 您的帖子出现在“低质量”审核队列中...因为没有足够的解释。我的建议是基于此...随时编辑它以说出您在上面所说的内容;)
    【解决方案3】:

    是的,“32(%esp)”表示从 %esp 偏移 32。

    【讨论】:

    【解决方案4】:

    正如@Necrolis 所说,这是用 AT&T 语法编写的。意思是:

    subtract 48 from the register esp (the stack pointer).
    store the contents of eax to the four bytes starting at (esp + 32).
    

    【讨论】:

      【解决方案5】:

      这是 x86 的 AT&T 语法。在 AT&T 中,% 通常表示寄存器,而$ 保留用于立即数。如果省略 $,汇编器会将 48 解释为地址。

      【讨论】:

        猜你喜欢
        • 2016-02-08
        • 1970-01-01
        • 1970-01-01
        • 2012-05-08
        • 1970-01-01
        • 1970-01-01
        • 2017-06-03
        • 2018-07-14
        相关资源
        最近更新 更多