段寄存器

发布时间 2023-09-04 13:43:58作者: TheWait

段寄存器
段寄存器一共有96位

点击查看代码
struct SegMent
{
  WORD Selector;
  WORD Atrributes;
  DWORD base;
  DWORD Limt;
}
其中Selector,可见。

段描述符

当执行MOV DS,AX是CPU会查表,根据AX的值来选择查找GDT,LDT表,查找表的什么位置,查出多少数据。理解:并不是把AX的值给DS,AX只是一个索引。base的组成是分开的上面部分是高位,下面是地位。同时limt发现没有32位,这取决于段描述符的G的值为0是Limt=000FFFFF,为1时候Limt=FFFFFFFF.p为表示这个描述符是否可用。


在p为1的情况下 00CF9B00`0000FFFF DPL只有全为1或者0,s为1或者0,为0时候是系统段描述符,这样构成的4位标识一个16进制数处于从左到右的第5位,只有为F或者9时候才是数据段或者代码段。
type位分别代码段或者数据段,第6位大于8就是代码段,否则数据段,因为转成16进制为type为最左边位为0。

数据段说明

代码段说明

D/B位说明

段选择子
段选择子是一个16位的段描述符,该描述符指向了定义该段的段描述符。

理解AX的值就是段选择子,查表后填充到DS里面。

段权限检查
1.如何查看程序处于几环,CPL,当前特权级别CS和SS中存储的段选择子的后俩位,3代表3环,0代表0环。
2.DPL,描述符特权级别,和CPL一致才能访问。
3.RPL,请求特权级别。

点击查看代码
Mov ax,0008
Mov ds,ax
8拆分,1000 RPL取后俩位00 与DPL,CPL一样的意思