Как создать два отдельных сегмента в таблице глобальных дескрипторов
Я ознакомился с основами таблицы глобальных дескрипторов (GDT) и успешно написал "GDT.inc" с использованием asm, так что мы легко можем включить его в наш загрузчик. В качестве детского шага я настроил дескриптор кода и дескриптор данных для чтения и записи от первого байта до байта 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 КБ пусто
Вы можете проверить " http://wiki.osdev.org/GDT_Tutorial" для получения дополнительной информации