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

Assembly x64 MOV 32位立即到64位寄存器,assembly,x86-64,instructions,machine-code,immediate-operand,Assembly,X86 64,Instructions,Machine Code,Immediate Operand,本页代码部分的第二条说明: 看起来是这样的:MOV r9d,0。编码如下:41 B9 00 唯一的问题是。。。《英特尔x64手册》中没有采用4字节立即数并将其放入64位寄存器的MOV指令 以下是英特尔手册中的说明: 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 r

本页代码部分的第二条说明:

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

唯一的问题是。。。《英特尔x64手册》中没有采用4字节立即数并将其放入64位寄存器的
MOV
指令

以下是英特尔手册中的说明:

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位寄存器。

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

您错过了,哪个符号扩展了立即数。它需要一个ModR/M字节,它不是您的代码所使用的,但您的声明是不正确的。它仅适用于内存目标,或者不能使用
mov r32、imm32的隐式零扩展名的负数。我在谷歌图像搜索中找到了它。谢谢你的发帖。你错过了,哪个标志延长了即时付款时间。它需要一个ModR/M字节,它不是您的代码所使用的,但您的声明是不正确的。它仅适用于内存目标,或者不能使用
mov r32、imm32的隐式零扩展名的负数。我在谷歌图像搜索中找到了它。谢谢你的发帖。