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

Gdt 如何在全局描述符表中创建两个单独的段,gdt,Gdt,我已经学习了全局描述符表(GDT)的基本知识,并且已经成功地使用asm编写了一个“GDT.inc”,这样我们就可以轻松地将它包含在引导加载程序中。作为一个小步骤,我将代码描述符和数据描述符配置为从内存中的第一个字节到0xFFFFFF字节(内存中的任何部分)进行读写 现在,我的目的是使用GDT创建两个单独的区域。例如,第一个512B作为一个区域,下一个512B作为另一个区域,并保留未使用的空间 我能做些什么呢?您只需更改基址和限制寄存器的位置即可。 在你给出的例子中 用于代码描述符 .base=0

我已经学习了全局描述符表(GDT)的基本知识,并且已经成功地使用asm编写了一个“GDT.inc”,这样我们就可以轻松地将它包含在引导加载程序中。作为一个小步骤,我将代码描述符和数据描述符配置为从内存中的第一个字节到0xFFFFFF字节(内存中的任何部分)进行读写

现在,我的目的是使用GDT创建两个单独的区域。例如,第一个512B作为一个区域,下一个512B作为另一个区域,并保留未使用的空间


我能做些什么呢?

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

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

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

然后,在1KB内存之后,剩下的内存将变为空

您可以检查“”以了解更多说明

; 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