Я изучаю разработку ядра. Используя книгу, я пришел к выводу. Однако я не могу понять влияние глобальной таблицы дескрипторов. Мой GDT выглядит следующим образом:
gdt_star:
gdt_null:
dd 0x0
dd 0x0
gdt_code:
dw 0xffff
dw 0x0000
db 0x00
db 10011011b
db 11001111b
db 0x0
gdt_data:
dw 0xffff
dw 0x0
db 0x00
db 10010010b
db 11001111b
db 0x0
gdt_end:
gdt_descriptor:
dw gdt_end - gdt_star - 1
dd gdt_star
CODE_SEG equ gdt_code - gdt_star
DATA_SEG equ gdt_data - gdt_star
После загрузки gdt и присвоения DATA_SEG регистрам ds, ss, es, fs, gs; мой ассемблерный код переходит на c-код. Базовый адрес сегмента данных - 0x00000000, а ограничение - 0xffff. Разве нельзя поставить значение в адрес памяти 0x100000?
Спасибо