我已经完成了全局描述符表(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作为另一个区域,并将剩余的空间保留为未使用。
我能为此做些什么?
答案 0 :(得分:1)
你可以改变你的基地址和地址。限制寄存器。 所以在你给出的例子中
代码描述符 .base = 0x0 .limit = 0x200 // 512字节
用于数据描述符 .base = 0x200 .limit = 0x200
然后在1 KB空
之后你有剩余的记忆您可以查看“http://wiki.osdev.org/GDT_Tutorial”了解更多说明