引用没有美元符号的常量是否具有不同的含义?

时间:2017-03-10 21:02:00

标签: assembly x86 x86-64 att

我写道:

mov 60, %rax

GNU as接受了它,虽然我应该写

mov $60, %rax

两次这样的电话有什么不同吗?

2 个答案:

答案 0 :(得分:7)

是;第一个加载存储在地址60的内存中的值,并将结果存储在rax中,第二个将立即值60存储到rax

答案 1 :(得分:3)

试试吧......

mov 60,%rax
mov $60,%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    $0x3c,%rax
   f:   48 8b 04 25 60 00 00    mov    0x60,%rax
  16:   00 

EWWW!从历史上看,美元符号意味着十六进制60美元= 0x60,但天然气也有修复汇编语言的历史......历史上x86汇编语言允许60h表示十六进制,但是当我这样做时出错了。

因此,无论是否有美元的叹息,你都会得到不同的指示。

0x8B是要注册的寄存器/存储器,0xC7是立即注册的。所以当davmac回答mov 60时,%rax是一个要注册的mov内存位置,而mov $ 60,%rax立即移动注册。