如何在全局描述符表中创建两个单独的段
问题描述:
我已经了解了全局描述符表(GDT)的基础知识,并且我已经成功使用asm编写了一个“GDT.inc”,以便我们可以轻松地将其包含在我们的引导程序。作为一个婴儿步骤i已经配置了代码描述符和数据描述符来读取和从第一字节写入到字节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作为另一个区域,并留下未使用的空间。
我能做些什么?
答
你可以改变你的基地址&限制寄存器的位置。 所以在例如你给
用于码描述符 .base =为0x0 .limit =在0x200 // 512字节
用于数据描述符 .base =在0x200 .limit =在0x200
然后您在1 KB空之后剩下的内存
您可以查看“http://wiki.osdev.org/GDT_Tutorial”以获取更多解释