at&t 汇编语法中带 $ 或不带 $ 符号的数字有啥区别?
Posted
技术标签:
【中文标题】at&t 汇编语法中带 $ 或不带 $ 符号的数字有啥区别?【英文标题】: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呢?
两条指令有什么不同?
【问题讨论】:
【参考方案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
这里是数据,不是指令以上是关于at&t 汇编语法中带 $ 或不带 $ 符号的数字有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章