问题描述
这是段寄存器的内容,它由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 |
我的问题是:
- 当我们如上所述设置
ds
时,是否仅在ds
寄存器中设置13位偏移量?如果是这样,计算机又如何处理其他3位(ti和rpl)? - 为什么IDT中的段选择器是16位?据我了解,此段选择器用作GDT的索引。像
ds
中的偏移量那样不是13位吗?
解决方法
-
否,它设置了完整的16位。
-
完整的16位被加载到CS中。 RPL用于许可 检查。中断处理程序的代码段描述符可以 驻留在GDT或LDT中。