Я пишу простой загрузчик, в котором я читаю следующий сектор с диска, загружаю gdt, переключаюсь в 32-битный режим и печатаю письмо, указывающее на успешность. На эмуляторе (qemu) все работает нормально, но физические системы сразу же перезагружаются при попытке обновить регистр 'ds' после входа в 32-битный режим. Если я попытаюсь обновить другие регистры сегментов, то на эмуляторе тоже будет взломано sh.
Код, вызывающий взлом sh
mov ax, 0x10
mov ds, ax
Если я закомментирую этот код, загрузчик работает отлично. gdt:
null:
dd 0x0
dd 0x0
code:
dw 0xffff
dw 0x0
db 0x0
db 10011010b
db 01000111b
db 0x0
data0:
dw 0xffff
dw 0x0
db 0x0
db 10010010b
db 01000111b
db 0x0