Защищенный режим процессоров Intel 80286/80386/80486© Александр Фролов, Григорий ФроловТом 4, М.: Диалог-МИФИ, 1993, 234 стр. 2.3. Возврат в реальный режимДля того, чтобы вернуть процессор 80286 из защищённого режима в реальный, необходимо выполнить аппаратный сброс (отключение) процессора. Это можно сделать следующим образом: mov ax, 0FEh ; команда отключения out 64h, ax Перед выдачей команды отключения необходимо запомнить содержимое регистра SP, так как после передачи управления по адресу, записанному в области данных BIOS 0040h:0067h, регистры SS:SP будет указывать на стек BIOS. После выдачи команды отключения надо подождать, когда произойдёт сброс процессора. Это можно сделать, выдавая в цикле команду HLT. Вот фрагмент программы, возвращающий процессор в реальный режим:
; Запоминаем содержимое указателя стека, так как после
; сброса процессора оно будет потеряно
mov [real_sp],sp
; Выполняем сброс процессора
mov al,SHUT_DOWN
out STATUS_PORT,al
; Ожидаем сброса процессора
wait_reset:
hlt
jmp wait_reset
Далее необходимо восстановить содержимое сегментных регистров, записанное в оперативную память на этапе подготовки к переключению в защищённый режим, закрыть адресную линию A20 и размаскировать прерывания. Для закрытия линии A20 можно воспользоваться следующей процедурой:
; ------------------------------------------------------------
; Процедура закрывает адресную линию A20
; ------------------------------------------------------------
PROC disable_a20 NEAR
mov al,A20_PORT
out STATUS_PORT,al
mov al,A20_OFF
out KBD_PORT_A,al
ret
ENDP disable_a20
Следующая последовательность команд размаскирует все прерывания:
mov ax,000dh ; разрешаем немаскируемые прерывания
out CMOS_PORT,al
in al,INT_MASK_PORT ; разрешаем маскируемые прерывания
and al,0
out INT_MASK_PORT,al
sti
Теперь, когда мы знаем всё, что нужно для переключения процессора в защищённый режим и возврата в реальный режим, можно приступить к практической работе в защищённом режиме. |

