在at& t汇编语法中,带有$或不带$符号的数字有什么区别?

时间:2013-09-25 05:25:15

标签: assembly

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

0x1234 00010203 04050607 08090a0b 0c0d0e0f
0x1238 10000000

在代码中,

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

我相信使用$符号,它将是常数,因此%eax将具有内存地址,但%ebx呢?

两条指令究竟有什么不同?

1 个答案:

答案 0 :(得分:7)

区别在于,$数值,而没有$则是地址

  

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

movl 10, %eax
movl foo, %eax
     

对应于intel语法:

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

要使用数字常量,或使用标签的地址,有$ operator:

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

在Intel语法中:

mov eax, 10
mov eax, offset foo
     

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