2013-01-16 38 views
0

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

我能做些什么?

回答

1

你可以改变你的基地址&限制寄存器的位置。 所以在例如你给

用于码描述符 .base =为0x0 .limit =在0x200 // 512字节

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

然后您在1 KB空之后剩下的内存

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

相关问题