R
Size: a a a
A
A
A
A
R
A
A
RS
RS
A
RS
RS
Переключение процессора из защищенного режима в реальныйвозможно не только через аппаратный сброс, как это было у 80286, но и сбросом бита РЕ в CR0. При этом для корректного перехода, согласно документации на процессоры, должны выполняться следующие действия:
Запретить маскируемые прерывания флагом IF, немаскируемые — внешней схемой.
Если включена страничная трансляция, то необходимо обеспечить равенство линейных и физических адресов для текущего исполняемого кода (перейти на такую страницу), а также для таблиц GDT и IDT. Обнулить бит PG в регистре CR0 и загрузить нули в CR3 для очистки кэш-буфера TLB.
Передать управление читаемому сегменту с лимитом 64 Кбайт.
Загрузить в сегментные регистры SS, DS, ES, FS и GS селектор дескриптора (ненулевой), в котором установлен лимит 64 Кбайт, байтовая дробность (G = 0), расширяемость вверх (Е = 0), доступность записи (W = 1) и присутствие (Р = 1). Если сегментные регистры не перезагружать, исполнение будет продолжаться с атрибутами, унаследованными от защищенного режима (шаги 3 и 4 предназначены для загрузки программно-недоступных регистров дескрипторов сегментов параметрами стандартного реального режима.
Инициализировать таблицу векторов прерываний реального режима (в пределах первого мегабайта) и указать на нее инструкцией LIDT.
Сбросить бит РЕ для перехода в реальный режим.
Выполнить дальний переход на программу реального режима, что сбросит очередь инструкций, декодированных в защищенном режиме, и загрузит соответствующие права доступа к сегменту кода.
Загрузить корректные значения в сегментные регистры и указатель стека.
Разрешить прерывания.
После этого загружаются остальные регистры. Процессор теперь работает в реальном режиме, по умолчанию с 16-разрядными адресами и данными.
A
A
A