NaN*_*NaN 3 assembly x86-64 add att
我尝试在汇编程序中添加一些值(AMD AT&T语法).但我有大的立即值(> 32位)的问题.
.globl f
.type f, @function
f:
movq %rdi, %r10
addq $0x0000000000000008, %r10 # no problem
addq $0x0000000122446688, %r10 # error
movq %r10, %rax
ret
Run Code Online (Sandbox Code Playgroud)
标记的行返回以下gcc错误:
错误:"添加"的操作数类型不匹配
但是addq应该能够处理这个数字:
0000000122446688(hex)= 4869875336(dec)
和log2(4869875336)~33bit(远小于64位).
ADD不会立即采用64位,只有一个版本接受32位符号扩展一个而你的第二个常量不符合该约束.请参阅指令集参考.
注意:q后缀指定操作大小,而不是immediate的大小.它是64位加法,但操作数编码为8或32位符号扩展立即.