x64 MOV 32 位立即数到 64 位寄存器
x64 MOV 32-bit immediate to 64-bit register
本页代码部分的第二条指令:
看起来像这样: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.
指令似乎有效,但如何?
r9d
不是 64 位寄存器。它是r9
寄存器的低32位,因此它是一个32位寄存器。
本页代码部分的第二条指令:
看起来像这样: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.
指令似乎有效,但如何?
r9d
不是 64 位寄存器。它是r9
寄存器的低32位,因此它是一个32位寄存器。