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字节),查出来的值给段寄存器赋值。