【问题标题】:What's difference between number with $ or without $ symbol in at&t assembly syntax?at&t 汇编语法中带 $ 或不带 $ 符号的数字有什么区别?
【发布时间】:2013-09-25 05:25:15
【问题描述】:

假设 .data 部分有以下项目:

0x1234 00010203 04050607 08090a0b 0c0d0e0f
0x1238 10000000

在代码中,

mov $0x1234, %eax
mov 0x1238, %ebx

我相信用$符号,它会是常数,所以%eax会有内存地址,但是%ebx呢?

两条指令有什么不同?

【问题讨论】:

    标签: assembly x86 att immediate-operand


    【解决方案1】:

    不同之处在于$数值,而没有$ 它是该地址的内存内容

    如果指令的参数没有任何特殊标记(例如寄存器的%或数字常量的$),则它是内存访问。如下:

    movl 10, %eax
    movl foo, %eax
    

    对应intel语法:

    mov eax, [10]
    mov eax, [foo]
    

    使用数字常量,或者使用标签地址,有$操作符:

    movl $10, %eax
    movl $foo, %eax
    

    在英特尔语法中:

    mov eax, 10
    mov eax, offset foo
    

    http://x86asm.net/articles/what-i-dislike-about-gas/

    【讨论】:

    • 那么你是说mov $0x1238, %ebx 只是数字常量而不是内存访问,即使内存中存在 0x1238 地址?
    • Memory access 这里是数据,不是指令
    猜你喜欢
    • 2018-06-23
    • 2018-03-22
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    • 2011-04-08
    • 1970-01-01
    • 2021-09-18
    相关资源
    最近更新 更多