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