assembly - x86 BSWAP 指令 REX 不遵循英特尔规范?
问题描述
我一直在用 NASM 和 GAS 组装(和反汇编)BSWAP x64 指令,并且都BSWAP r15
像490FCF
十六进制一样组装指令。反汇编程序也将其反汇编为相同的指令。
因此,指令 ( ) 的 REX 前缀设置49
了 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
。
我的问题是,谁是正确的?组装商还是英特尔?
解决方案
推荐阅读
- php - finfo_file(C:\xampp\tmp\phpC546.tmp):打开流失败:没有这样的文件或目录
- java - 是否有支持 2 个键的 Java Map 实现?
- java - 如何使用对象映射器反序列化Java中的嵌套对象
- wpf - WPF 如何在不覆盖派生样式的情况下将样式应用于自定义控件项
- nsis - 如何根据条件强制 NSIS 部分
- lazarus - Lazarus DBLookupCombobox 无法将 null 转换为 int64 以进行数据提交
- amazon-web-services - 是否有可能制定“无操作”IAM 政策?
- graph - 在 gremlin 查询中显示级别
- c++ - 非类类型表达式的静态与动态类型之间的区别
- java - JavaFX 看不到有关包的错误