|
|
1
5
IA32_EFER MSR中的比特LMA(长模式活动)指示处理器处于长模式(64比特模式)。 当处于长模式时,活动代码段描述符中的L位指示处理器是解码32位指令还是64位指令。 为了更改LMA,软件清除CR0中的PG位,更改EFER中的LME位,然后设置PG。 为了改变CS中的L位,软件执行一个远跳或远调用,以用具有所需值的代码段描述符的选择器加载CS。 |
|
|
2
1
对于80x86;CPU模式与代码大小或指令解码几乎没有关系(主要决定在昂贵的事情中发生什么,如段寄存器加载和降级为微代码的中断处理程序)。 对于指令解码来说,重要的是代码大小(而不是CPU模式);有三种可能——16位代码、32位代码和64位代码。 在长模式中,代码大小由代码段描述符中的2位决定。 在保护模式下,代码大小由代码段描述符中的1位决定(64位代码不是选项)。 在真实模式(以及其他一些情况下-虚拟8086模式、系统管理模式)中,代码大小“名义上固定”为16位(其中“名义上不变”意味着有办法暂时切换到另一种模式来混淆事情)。 |