段描述符与段选择子

GDTR 寄存器

存放的是GDT(全局描述符表)表的位置和大小,大小为48位
在windeg中 r gdtr 查看GDT表的位置
r gdtl 查看表的大小
GDT表里面存放的元素称为段描述符 大小为8字节

dd +地址 查看地址里面的内容 查看4字节
dq +地址 查看8字节
在这里插入图片描述

段寄存器

段寄存器结构

WORD Selectot  //段选择子
WORD Attribute  //属性
DWORD Base   //基地址
DWORD Limit //界限
mov ds,ax

段描述符的长度为96位,可见部分是16位。所以赋值时要用16位寄存器。
实际上ds会被赋值96位,段寄存器的值是根据段描述符填充的
但段描述符只有64位,是怎么变成80位的呢?

段描述符

在这里插入图片描述

段选择子

在这里插入图片描述
段选择子是一个16位的段描述符

串起来: 给一个段寄存器赋值的时候 类似 mov ds,ax 实际上ds会被赋值96位 过程是这样的
1:把ax看成段选择子 经过段权限检查(段选择子的RPL<=DPL)
2:看TI 位,如果为0,查GDT表。如果为1,查LDT表(windows只用GDT表所以这里的值一定为0);
3:把第3至15位看成一个索引,在GDT表中查出段描述符(8字节),查出来的值给段寄存器赋值。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41490873/article/details/88084094