что единственный способ замаскировать немаскируемые
Напомним, что единственный способ замаскировать немаскируемые прерывания в компьютере IBMAT - это записать в порт 70h байт, в котором старший бит установлен в 1. Поэтому наш фрагмент программы не только записывает байт состояния отключения, но и маскирует немаскируемые прерывания (!). Нам необходимо также замаскировать обычные прерывания, поэтому мы выдаём команду CLI.
cli mov al,8f out CMOS_PORT,al jmp next1 ; небольшая задержка next1: mov al,5 out CMOS_PORT+1,al
Следующий шаг - открытие адресной линии A20 - необходим в том случае, если ваша программа будет обращаться к оперативной памяти, лежащей за пределами первого мегабайта.
Приведём процедуру, которую можно использовать для этой цели:
; ------------------------------------------------------------ ; Процедура открывает адресную линию A20 ; ------------------------------------------------------------
PROC enable_a20 NEAR mov al,A20_PORT out STATUS_PORT,al mov al,A20_ON out KBD_PORT_A,al ret ENDP enable_a20
Эта магическая последовательность команд выдаёт команду A20_ON клавиатурному процессору 8042, к которому подключены схемы управления адресной линией A20. После начального сброса линия A20 закрыта, и расширенная память за границами первого мегабайта недоступна.
Следующий этап - запоминание содержимого сегментных регистров, которые будут нужны при возврате в реальный режим. Это сегментные регистры SS и ES:
mov [real_ss],ss ; запоминаем указатель стека mov [real_es],es ; для реального режима
На последнем перед переключением в защищённый режим этапе мы загружаем регистр GDTR адресом подготовленной заранее GDT:
lgdt [QWORD gdt_gdt]
Всё! Можно переключаться в защищённый режим!
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий