You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

x86 long mode专属指令是否可在保护模式下使用?反汇编结果疑问

原因说明

你对规则的理解和反汇编工具的解码结果都没有错误,冲突来自指令编码的模式适配规则:

  • 0f 20 /r 本身是MOV r32, CRn指令组的操作码,在32位保护模式下本身就是合法指令,作用是把控制寄存器的值写入32位通用寄存器。到64位长模式后,该操作码的默认操作数宽度扩展为64位,无需REX前缀即可对应MOV r64, CRn,实现64位控制寄存器值的读取。
  • 你参考的文档里标记为仅64位可用的条目,对应的是该指令的64位独有变体,要么是需要REX.W前缀触发的64位操作,要么是本身仅在64位模式下定义的操作码,你匹配到的条目应该对应带REX前缀的mov rbp, cr2编码,而非无REX前缀的0f 20 55原始字节流。
  • 32位模式下将0f 20 55解码为mov ebp, cr2完全符合x86指令集规范:操作码后的ModR/M字节为0x55,对应Mod=01, Reg=010, R/M=101,其中Reg字段指向CR2,R/M字段指向EBP,解码逻辑没有问题。

补充提示

x86指令集的编码存在大量模式适配逻辑,同一段字节流在不同执行模式下会被解码为不同指令。部分标注「仅64位可用」的指令,指的是该指令的64位独有功能(如访问64位寄存器宽度、使用64位寻址),不代表基础操作码在32位模式下没有对应定义。

内容的提问来源于stack exchange,提问作者Jorayen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 20:06:04