Нереальный режим
Как известно, начиная с 386 сегментные регистры в процессорах Intel
содержат 10 байт, восемь из которых хранят запись о сегменте, которая при
загрузке регистра считывается из таблицы GDT или LDT.
При переключении режимов с реального на защищенный и наоборот
содержимое этой "теневой" части не теряется! Благодаря этому стала
возможна следующая хитрость - можно загрузить в защищенном режиме эти
регистры селекторами четырехгигабайтных сегментов и после этого
возвратиться обратно в реальный режим.
Теперь (поскольку мы в реальном режиме) мы имеем доступ к прерываниям
BIOS и в то же время (поскольку в теневой части сегментных регистров лежат
описания четырехгигагабайтных сегментов) мы можем свободно обращаться ко
всей адресуемой процессором памяти
Для перехода из защищенного режима в нереальный достаточно сбросить бит
PE из управляющего регистра CR0:
mov eax, cr0
and al, 0xFE
mov
cr0, eax
И после этого совершить прыжок (чтобы загрузить регистр
CS):
jmp enter_unreal
При входе в функцию enter_unreal
нужно записать что-нибудь в каждый сегментный регистр (содержимое теневой
части сохранится!).