我一直在与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>
我的问题是,谁是正确的?汇编程序还是英特尔?