1、选定GDT的内存起始地址为0X00007E00
引导程序的位置是 0X00007C00,引导程序的大小为512字节,0X00007C00+512(0X200) = 0X00007E00,所以我们可以在紧接着“主引导程序”的内存位置 0X00007E00 存放GDT
其实选择内存地址0X7E00还有一个原因:实模式下只能访问1MB的内存
2、计算GDT的逻辑地址
我们选定的GDT起始地址0x00007E00,占用了双字,我们在程序中定义的“0x00007E00” 值,定义该值在代码段中的偏移量为gdt_base,如下图:
汇编程序实现如下:
;计算GDT所在的逻辑段地址{
mov ax,[cs:gdt_base+0x00007c00] ;0X00007E00的低16位放入ax
mov dx,[cs:gdt_base+0x00007c00+0x02] ;0X00007E00的高16位放入dx
mov bx,16
div bx
;商(段地址)在ax,余数(段内偏移地址)在dx中
mov ds,ax
mov bx,dx ;段内起始偏移地址
;}
gdt_base dd 0x00007e00 ;GDT的物理地址
0X00007E00的高16位放入dx ,0X00007E00的低16位放入ax,div bx
得到的商是段地址,在ax中,余数是偏移地址,在dx中。
3、创建并安装段描述符
段描述符是CPU