假设.data部分有以下项目:
0x1234 00010203 04050607 08090a0b 0c0d0e0f
0x1238 10000000
在代码中,
mov $0x1234, %eax
mov 0x1238, %ebx
我相信使用$符号,它将是常数,因此%eax将具有内存地址,但%ebx呢?
两条指令究竟有什么不同?
答案 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