假设 .data 部分有以下项目:
0x1234 00010203 04050607 08090a0b 0c0d0e0f
0x1238 10000000
在代码中,
mov $0x1234, %eax
mov 0x1238, %ebx
我相信使用 $ 符号,它将是常数,因此 %eax 将具有内存地址,但是 %ebx 呢?
两条指令到底有什么不同?
不同的是,与$
这是数值而没有$
这是该地址的内存内容
如果指令的参数没有任何特殊标记(例如寄存器的%或数字常量的$),那么它是内存访问。所以如下:
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/ http://x86asm.net/articles/what-i-dislike-about-gas/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)