CS寄存器如何在保护模式下工作?

问题描述

这是段寄存器的内容,它由13位偏移量,1位表指示符和2位请求的特权级别组成:

Bit:     | 15                                3 | 2  | 1 0 |
Content: | offset (index)                      | ti | rpl |

这是用于初始化ds寄存器的代码段:

.set PROT_MODE_DSEG,0x10
movw $PROT_MODE_DSEG,%ax
movw %ax,%ds

这是中断描述符表(IDT)中条目的最低32位:

Bit:     | 31              16 | 15              0 |
Content: | segment selector   | offset low        |

我的问题是:

  1. 当我们如上所述设置ds时,是否仅在ds寄存器中设置13位偏移量?如果是这样,计算机又如何处理其他3位(ti和rpl)?
  2. 为什么IDT中的段选择器是16位?据我了解,此段选择器用作GDT的索引。像ds中的偏移量那样不是13位吗?

解决方法

  1. 否,它设置了完整的16位。

  2. 完整的16位被加载到CS中。 RPL用于许可 检查。中断处理程序的代码段描述符可以 驻留在GDT或LDT中。