0

我已经了解了全局描述符表 (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 作为另一个区域,并留下未使用的空间。

我能做些什么呢?

4

1 回答 1

1

您可以更改基址和限制寄存器的位置。所以在你给出的例子中

对于代码描述符 .base = 0x0 .limit = 0x200 //512 字节

对于数据描述符 .base = 0x200 .limit = 0x200

那么在 1 KB 为空后,您将拥有剩余的内存

您可以查看“ http://wiki.osdev.org/GDT_Tutorial ”以获得更多解释

于 2013-04-17T19:27:03.660 回答