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的隐式零扩展名的负数。我在谷歌图像搜索中找到了它。谢谢你的发帖。