我已经了解了全局描述符表 (GDT) 的基础知识,并且我已经使用 asm 成功编写了一个“GDT.inc”,以便我们可以轻松地将它包含在我们的引导加载程序中。作为一个婴儿步骤,我已将代码描述符和数据描述符配置为从第一个字节读取和写入内存中的字节 0xFFFFFFFF(内存中的任何部分)
; null descriptor
dd 0 ; null descriptor--just fill 8 bytes with zero
dd 0
; code descriptor: ; code descriptor. Right after null descriptor
dw 0FFFFh ; limit low
dw 0 ; base low
db 0 ; base middle
db 10011010b ; access
db 11001111b ; granularity
db 0 ; base high
; data descriptor: ; data descriptor
dw 0FFFFh ; limit low (Same as code)
dw 0 ; base low
db 0 ; base middle
db 10010010b ; access
db 11001111b ; granularity
db 0 ; base high
现在我的目的是使用 GDT 创建两个单独的区域。例如,第一个 512B 作为一个区域,下一个 512B 作为另一个区域,并留下未使用的空间。
我能做些什么呢?