i386中的哪个寄存器存储CPL?

xtt*_*xtt 6 x86 x86-64 cpu-architecture cpu-registers i386

我在《 INTEL 80386程序员参考手册》(p112,S 6.3.1.3)中读到,

内部处理器寄存器记录当前特权级别(CPL)。

我对它指的是什么感到好奇。它甚至有名字吗?寄存器的大小是多少?它还有其他用途吗?

Mic*_*tch 6

当前特权级别(CPL)始终可以在代码段(CS)寄存器的低2位中找到。这2位可以是值0b00(环0),0b01(环1),0b10(环2),0b11(环3)。

应该注意的是,旧文档中使用的内部处理器寄存器记录当前特权级别(CPL)”的文档有点欺骗性,并且也导致了其他人的头痛。CS始终在低2位中包含CPL,但显然它不是内部寄存器。

微体系结构内部也可以具有CPL的副本,但是始终可以通过查看CS来以编程方式访问它。

与您的问题没有直接关系,但可能对您有所帮助。如果在不同的环之间转换,并且目标代码段选择器的描述符是符合条件的段,则可能是描述符特权级别(DPL)!= CPL。这是因为在符合条件的段中,您将继续以先前的特权级别运行。对于不合格的段,DPL == CPL。