Как создать два отдельных сегмента в таблице глобальных дескрипторов

Я ознакомился с основами таблицы глобальных дескрипторов (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" для получения дополнительной информации

Другие вопросы по тегам