没有美元符号的引用常量是否具有不同的含义?
Does referencing constants without a dollar sign have a distinct meaning?
我写了:
mov 60, %rax
GNU as
接受了,虽然我应该写
mov , %rax
两个这样的调用有区别吗?
是;第一个加载存储在内存中地址 60 的值并将结果存储在 rax
,第二个将立即值 60 存储到 rax
.
试试吧...
mov 60,%rax
mov ,%rax
mov 0x60,%rax
0000000000000000 <.text>:
0: 48 8b 04 25 3c 00 00 mov 0x3c,%rax
7: 00
8: 48 c7 c0 3c 00 00 00 mov [=10=]x3c,%rax
f: 48 8b 04 25 60 00 00 mov 0x60,%rax
16: 00
哇!从历史上看,美元符号表示十六进制 $60 = 0x60,但 gas 也有搞砸汇编语言的历史......并且历史上 x86 汇编语言允许 60h 表示十六进制,但当我这样做时出现错误。
所以有美元叹息和没有美元叹息你会得到不同的指令。
0x8B是register/memory注册,0xC7是立即注册。因此 davmac 回答 mov 60,%rax 是要注册的 mov 内存位置,而 mov $60,%rax 是要立即注册的 mov。
我写了:
mov 60, %rax
GNU as
接受了,虽然我应该写
mov , %rax
两个这样的调用有区别吗?
是;第一个加载存储在内存中地址 60 的值并将结果存储在 rax
,第二个将立即值 60 存储到 rax
.
试试吧...
mov 60,%rax
mov ,%rax
mov 0x60,%rax
0000000000000000 <.text>:
0: 48 8b 04 25 3c 00 00 mov 0x3c,%rax
7: 00
8: 48 c7 c0 3c 00 00 00 mov [=10=]x3c,%rax
f: 48 8b 04 25 60 00 00 mov 0x60,%rax
16: 00
哇!从历史上看,美元符号表示十六进制 $60 = 0x60,但 gas 也有搞砸汇编语言的历史......并且历史上 x86 汇编语言允许 60h 表示十六进制,但当我这样做时出现错误。
所以有美元叹息和没有美元叹息你会得到不同的指令。
0x8B是register/memory注册,0xC7是立即注册。因此 davmac 回答 mov 60,%rax 是要注册的 mov 内存位置,而 mov $60,%rax 是要立即注册的 mov。