【问题标题】:x64 MOV 32-bit immediate to 64-bit registerx64 MOV 32 位立即数到 64 位寄存器
【发布时间】:2015-04-07 21:45:40
【问题描述】:

本页代码段第二条指令:

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

唯一的问题是...英特尔 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.

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

【问题讨论】:

  • 你错过了REX.W C7 /0 id mov r/m64, imm32,它会扩展立即数。它需要一个 ModR/M 字节,这不是您的代码使用的,但您的声明不正确。它仅对内存目标有用,或者对不能使用 mov r32, imm32 的隐式零扩展的负数有用。
  • 迷人的图表。我在谷歌图片搜索中找到了它。感谢发帖。

标签: assembly x86-64 instructions machine-code immediate-operand


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2013-03-15
    • 2011-10-26
    • 1970-01-01
    • 2014-02-21
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 2014-12-17
    相关资源
    最近更新 更多