x86 BSWAP指令REX不符合Intel规范吗?

时间:2018-11-26 15:41:28

标签: assembly x86 language-lawyer disassembly

我一直在与NASM和GAS一起组装(和拆卸)BSWAP x64指令,并且都以十六进制形式将指令BSWAP r15组装为 490FCF 。反汇编程序也将其反汇编为同一指令。

因此,指令(49的REX前缀设置了REX.W位(位3)和REX.B位(位0)。这直接与英特尔文档相反,该文档指出:

  

在64位模式下,指令的默认操作大小为32位。 使用REX.R许可形式的REX前缀   访问其他寄存器(R8-R15)。使用REX.W形式的REX前缀可将操作提升到64位。

(强调我的)

因此,根据文档,应设置REX.W位和REX.R位(第2位),而不是REX.B,并给出编码 4C0FCF 。 / p>

我的问题是,谁是正确的?汇编程序还是英特尔?

1 个答案:

答案 0 :(得分:5)

该手册有误。请参阅 2.2.1.2有关REX前缀字段的更多信息中的REX前缀说明,该消息表示:

  

REX.B在ModR / M r / m字段或SIB基本字段中修改基数;或修改用于访问GPR的操作码reg字段。

图2-7。寄存器操作码字节编码的操作数; REX.X和REX.R未使用,其外观如下:

Figure 2-7. Register Operand Coded in Opcode Byte; REX.X & REX.R Not Used

BSWAP使用操作码reg字段。