首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >x86 BSWAP指令REX不遵循英特尔规范?

x86 BSWAP指令REX不遵循英特尔规范?
EN

Stack Overflow用户
提问于 2018-11-26 15:41:28
回答 1查看 421关注 0票数 8

我一直在用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.

我的问题是,谁是对的?汇编程序还是情报?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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字段。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53484556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档