Intel CPU如何确定x86或x64模式?

SRo*_*mes -2 x86 assembly x86-64 intel cpu-architecture

Intel x64 CPU 也可以运行 x86 asm。CPU 中是否有标志或模式来确定指令是否应解码为 x86 还是 x64?CPU 如何知道指令是 x86 还是 x64?

在 CPU 级别(不是操作系统级别!),是否可以混合使用 x86 和 x64 指令?

注意:在操作系统级别有很多关于这个问题的 SO 问答;我对CPU级别感兴趣。谈论库、文件等,都不是CPU层面的。

prl*_*prl 5

IA32_EFER MSR 中的 LMA 位(长模式活动)指示处理器处于长模式(64 位模式)。

在长模式下,活动代码段描述符中的 L 位指示处理器正在解码 32 位指令还是 64 位指令。

要更改 LMA,软件会清除 CR0 中的 PG 位,更改 EFER 中的 LME 位,然后设置 PG。

要更改 CS 中的 L 位,软件会执行远跳转或远调用,以使用具有所需值的代码段描述符的选择器加载 CS。