整理头文件及程序说明

  • 头文件

整理头文件及程序说明

        将一系列的函数声明放在一个头文件里,在分割出来的文件里面分别使用 #include<bootpack.h> 引用,减少重复声明。

整理头文件及程序说明

  • 程序说明:

整理头文件及程序说明

      GDTR 的低16位是段上限,它等于“GDT的有效字节数减一“,剩下的高32位,代表GDT的开始地址。

整理头文件及程序说明

       为了保存段的大小,段的起始地址,段的管理属性,声明了结构体segment_descriptor。段的地址使用32位表示,是段的基址,结构体中又使用了base_low(2个字节),base_mid(1个字节),base_high(1个字节)三段,合起来刚好是32位。

整理头文件及程序说明

 

整理头文件及程序说明

         由于段上限只有两个字节,表示一个段有多少个字节,段上限最多只能指定1MB为止。所以intel设置了一个标志位Gbit,但标志位为1时,limit的单位不解释成字节,而是解释成一页(4KB)。1M*4KB=4GB,所以可以指定4GB的段。

整理头文件及程序说明

 

整理头文件及程序说明

 

整理头文件及程序说明

 

整理头文件及程序说明

 

     整理头文件及程序说明 

        按照文章的说法,前四个字节应该是段的起始地址,其中base_low占2字节,base_mid占1字节,base_high占一个字节。段上限占20个位,第四五个字节是limit_low,加上第六个字节limit_high的低四位总共20位用于存储段上限。Limit_high的高四位和第7个字节用于存储段属性。