x64 MOV 32位立即数到64位寄存器

Rya*_*own 2 assembly x86-64 machine-code instructions immediate-operand

本页代码部分的第二条指令:

x86

看起来像这样:MOV r9d, 0。编码如下:41 B9 00 00 00 00

唯一的问题是... Intel x64 手册中没有任何MOV指令可以获取 4 字节立即数并将其放入 64 位寄存器中。

这些是英特尔手册中的说明:

B0+ rb          MOV r8, imm8 Move imm8 to r8.
REX + B0+ rb    MOV r8***, imm8 Move imm8 to r8.
B8+ rw          MOV r16, imm16 Move imm16 to r16.
B8+ rd          MOV r32, imm32 Move imm32 to r32.
REX.W + B8+ rd  MOV r64, imm64 OI Valid N.E. Move imm64 to r64.
Run Code Online (Sandbox Code Playgroud)

该指令似乎有效,但是如何呢?

Jes*_*ter 5

r9d不是 64 位寄存器。它是寄存器的低 32 位r9,因此它是一个 32 位寄存器。