3

在以保护模式在 x86 上运行的自定义操作系统中,除了执行特权指令并查看它是否崩溃之外,还有其他方法可以获得当前特权级别吗?

例如,寄存器CR0包含PE位,它指示我们是在实模式还是保护模式下运行,并且可以使用汇编代码轻松检索。

特权级别是否有等效的东西?

英特尔架构软件开发人员手册提到该EFLAGS寄存器包含两个IOPL与 I/O 特权级别相关的位。这与当前的特权级别 (CPL) 相同吗?

4

1 回答 1

5

不,不一样。这些代表 io 特权级别。某些指令(例如IN, OUT, )CLI需要 io 权限,这些权限是使用IOPL和 确定的CPL

也可以看看:

IOPL I/O 权限级别字段(位 12 和 13)——指示当前运行的程序或任务的 I/O 权限级别 (IOPL)。当前运行的程序或任务的 CPL 必须小于或等于 IOPL 才能访问 I/O 地址空间。

CPL可以简单地从选择器中读取为CS两个最低位:

mov ax, cs
and ax, 3

这当然只适用于保护模式。

于 2015-07-23T12:31:57.823 回答