Intel CPU如何判定x86/x64运行模式 能否在CPU层面混合两类指令?
Intel x64架构指令解码模式硬件原理
是否存在专门的模式控制位
存在两个核心硬件标识位共同决定当前指令的解码模式:
- IA32_EFER寄存器(Extended Feature Enable Register)的L位(第8位,也叫LME位):用于全局启用x64长模式支持,该位置0时CPU仅支持传统x86解码规则
- 代码段寄存器CS的L位:当IA32_EFER.L位已置1时,CS.L=1代表当前运行在64位长模式,使用x64指令解码规则;CS.L=0代表运行在32位兼容模式,使用x86指令解码规则
CPU如何区分两类指令
CPU指令解码器在解析指令字节前,会先读取当前生效的上述两个模式位状态,作为解码的全局规则依据,相同的字节序列在不同模式下会被解析为完全不同的指令:
例:单字节指令
0x48,在x86模式下会被解码为INC EAX(累加器自增指令),在x64模式下会被解码为REX.W前缀(用于标识后续指令操作数为64位宽度)
指令流本身不需要携带任何区分x86/x64的标识,解码逻辑完全依赖当前模式位状态判断。
硬件层面是否支持混合使用两类指令
不支持。同一段指令流的解码规则由当前全局生效的模式位统一决定,同一时间只能启用一种解码规则,不存在单条指令流中部分用x86解码、部分用x64解码的硬件支持。如果需要切换解码规则,必须显式修改CS寄存器的L位完成模式切换后,新的解码规则才会生效。
内容的提问来源于stack exchange,提问作者SRobertJames
相关产品推荐
相关产品推荐

