在这篇文章中我们完成了以下内容:
- 介绍 GDT
- 介绍段描述符
- 实现一个段描述符
介绍 GDT
GDT 是什么?
GDT(Global Descriptor Table)是一种数据结构,用来提供段式存储机制,这种机制是通过段寄存器和 GDT 中的描述符共同提供的。
在保护模式下,虽然现在的寄存器已经有32位的,但是我们依旧采用『段:偏移』的形式来寻址,只不过『段』的概念就相当于 GDT,段值仍然由16位的 cs、ds 等寄存器表示,但是这时段值仅仅是相当于一个索引,指向一个数据结构,这个数据结构就是 GDT一个表项,这个表项定义有段的起始地址、界限、属性等内容,这个表项也叫做描述符(descriptor)
描述符结构
代码段和数据段描述符
段描述符是一个8个字节的结构体,其中包含了段基址、段界限、段属性等信息
- 段基址(32位):表示物理地址
- 段界限(20位):表示段的长度(并不是地址,而是字节长度)
- 段属性(12位):系统、门、数据等属性
下面我们来实现这个结构体:
;描述符
;3个参数:
; 1.段基址:32位(4字节)
; 2.段界限:低20位
; 3.属性:12位(高字节中的低4位总是0)
%macro