我一直在用NASM和GAS组装(和拆卸) BSWAP x64指令,并将指令BSWAP r15组装成十六进制的BSWAP r15。反汇编程序也将其反汇编到相同的指令中。
因此,指令(49)的REX前缀具有REX.W位(位3)和REX.B位(位0)集。这与Intel文档形成了直接的对比,后者指出:
在64位模式下,指令的默认操作大小为32位.使用REX.R形式的REX前缀的允许访问附加寄存器(R8-R15)。使用REX前缀的REX.W将操作提升到64位。
(强调地雷)
因此,根据文档,应该设置REX.W位和REX.R位(bit 2),而不是REX.B,给出编码4C0FCF.
我的问题是,谁是对的?汇编程序还是情报?
发布于 2018-11-26 15:53:29
手册在那里错了。请参阅2.2.1.2节中关于REX前缀字段的说明,其中指出:
REX.B要么修改ModR/ or /m字段或SIB基字段中的基,要么修改用于访问GPRs的操作码reg字段。
图2-7.在Opcode Byte中编码的寄存器操作数;REX.X & REX.R未使用,其如下所示:

BSWAP使用操作码reg字段。
https://stackoverflow.com/questions/53484556
复制相似问题