我写道:
mov 60, %rax
GNU as
接受了它,虽然我应该写
mov $60, %rax
两次这样的电话有什么不同吗?
答案 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立即移动注册。