如何在全局描述符表中创建两个单独的段

时间:2013-01-16 09:06:32

标签: gdt

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

我能为此做些什么?

1 个答案:

答案 0 :(得分:1)

你可以改变你的基地址和地址。限制寄存器。 所以在你给出的例子中

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

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

然后在1 KB空

之后你有剩余的记忆

您可以查看“http://wiki.osdev.org/GDT_Tutorial”了解更多说明