i386 中的什么寄存器存储 CPL?
What register in i386 stores the CPL?
我在 "INTEL 80386 PROGRAMMER'S REFERENCE MANUAL" (p112, S 6.3.1.3) 中读到
An internal processor register records the current privilege level
(CPL).
我很好奇它指的是什么寄存器。它甚至有名字吗?寄存器的大小是多少?它还有别的用处吗?
Current Privilege Level (CPL) 始终可以在代码段 (CS) 寄存器的低 2 位中找到。这 2 位可以是值 0b00(环 0)、0b01(环 1)、0b10(环 2)、0b11(环 3)。
应该注意的是,旧文档使用 "An internal processor register records the current privilege level (CPL)" 有点欺骗性,也让其他人有些头疼。 CS 总是在低 2 位包含 CPL 但显然它不是内部寄存器。
微体系结构内部也可能有 CPL 的副本,但始终可以通过查看 CS.
以编程方式访问它
与您的问题没有直接关系,但了解一下可能会有用。如果您在不同的环之间转换并且目标代码段选择器的描述符是 conforming segment,则描述符特权级别 (DPL) != CPL 是可能的。这是因为对于符合标准的段,您可以继续 运行 之前的特权级别。有不合格的航段 DPL == CPL.
我在 "INTEL 80386 PROGRAMMER'S REFERENCE MANUAL" (p112, S 6.3.1.3) 中读到
An internal processor register records the current privilege level (CPL).
我很好奇它指的是什么寄存器。它甚至有名字吗?寄存器的大小是多少?它还有别的用处吗?
Current Privilege Level (CPL) 始终可以在代码段 (CS) 寄存器的低 2 位中找到。这 2 位可以是值 0b00(环 0)、0b01(环 1)、0b10(环 2)、0b11(环 3)。
应该注意的是,旧文档使用 "An internal processor register records the current privilege level (CPL)" 有点欺骗性,也让其他人有些头疼。 CS 总是在低 2 位包含 CPL 但显然它不是内部寄存器。
微体系结构内部也可能有 CPL 的副本,但始终可以通过查看 CS.
以编程方式访问它与您的问题没有直接关系,但了解一下可能会有用。如果您在不同的环之间转换并且目标代码段选择器的描述符是 conforming segment,则描述符特权级别 (DPL) != CPL 是可能的。这是因为对于符合标准的段,您可以继续 运行 之前的特权级别。有不合格的航段 DPL == CPL.