在我的64位英特尔机器下面的代码工作:
mov rdi, 1 << 40
add r10, rdi
这个看起来非常等效的产生警告并且不起作用:
add r10, 1 << 40
我应该坚持1号还是我错过了什么?这种行为似乎很尴尬。
代码nr 2产生的警告:
warning: signed dword immediate exceeds bounds
答案 0 :(得分:8)
mov r/m64, imm64
有一个操作码,但x86-64指令集中没有add r/m64, imm64
的操作码。换句话说:您不能对add
使用64位立即数操作数,但可以使用mov
(有许多指令没有imm64
变量;您可以检查“英特尔软件开发人员手册”中的“指令集参考”,用于检查哪些指令具有此类型,哪些不具有此类型。