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

标签 x86 x86-64 cpu-architecture cpu-registers i386

我在“英特尔 80386 程序员引用手册”(p112,S 6.3.1.3)中读到

An internal processor register records the current privilege level (CPL).



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

最佳答案

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

应该注意的是,旧文档使用“An 内部处理器寄存器记录当前特权级别(CPL)”有点欺骗性,也引起了其他人的一些头疼。 CS 总是在低 2 位中包含 CPL,但显然它不是内部寄存器。

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

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

关于x86 - i386 中的哪个寄存器存储 CPL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57926177/

相关文章:

x86 - x86/x64 芯片还在使用微编程吗?

linux - 我如何编译汇编代码以便可以看到它的十六进制字节代码?

assembly - 这个只有一个操作数的 x86-64 addq 指令是什么意思? (摘自CSAPP书籍第三版)

c++ - 汇编中 64 位结果的最快阶乘实现

c - 如何以编程方式禁用不可屏蔽中断?

caching - 高速缓存和暂存器存储器

assembly - 从内存中注册的 MOV 不适用于 nasm 中的 BITS 32

assembly - 用 DOS 或 BIOS 显示字符

java - 如何知道以浮点格式表示时分数是否会向上舍入(re : java remainder [%] results when using fp's)

android - Cordova CLI : Mismatch of CPU architecture