7

在我的 64 位 Intel 机器上,以下代码有效:

mov rdi, 1 << 40
add r10, rdi

而这个看起来相当相似的会产生警告并且不起作用:

add r10, 1 << 40

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

代码 nr 2 产生的警告:

warning: signed dword immediate exceeds bounds
4

1 回答 1

12

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

于 2013-11-16T16:13:47.660 回答