我可以将64位常数添加到64位寄存器吗?

时间:2013-11-16 16:07:33

标签: assembly x86-64

在我的64位英特尔机器下面的代码工作:

mov rdi, 1 << 40
add r10, rdi

这个看起来非常等效的产生警告并且不起作用:

add r10, 1 << 40

我应该坚持1号还是我错过了什么?这种行为似乎很尴尬。

代码nr 2产生的警告:

warning: signed dword immediate exceeds bounds

1 个答案:

答案 0 :(得分:8)

mov r/m64, imm64有一个操作码,但x86-64指令集中没有add r/m64, imm64的操作码。换句话说:您不能对add使用64位立即数操作数,但可以使用mov(有许多指令没有imm64变量;您可以检查“英特尔软件开发人员手册”中的“指令集参考”,用于检查哪些指令具有此类型,哪些不具有此类型。