ВУЗ:
Составители:
50
Набор подпрограмм, необходимых для переключения сегментного
регистра GS в режим линейной адресации, показан в листинге 2.1 [1]. Как
сказано выше, перезапись содержимого теневого регистра процессора
возможна только в защищенном режиме, а переход в этот режим, как видно из
листинга, требует ряда дополнительных операций, выполняемых процедурой
Initialization. В частности, нужно перенастроить на специально выделенные
в кодовом сегменте области данных регистры DS, SS и SP. В момент
перенастройки регистров стека должны быть запрещены прерывания,
поскольку некоторые обработчики прерываний пишут информацию в стек
прерываемой программы.
Процедура SetLAddrModeForGS, непосредственно осуществляющая
перенастройку регистра GS в режим линейной адресации, воспроизводит (с
незначительными изменениями) метод Родена. Прежде чем осуществить
переключение, нужно вначале подготовить таблицу GDT (настроить на
текущие сегменты кода и данных) и загрузить ее. Затем нужно войти в
защищенный режим — установить в единицу бит РЕ регистра CR0, а
остальные разряды сохранить без изменений (в том виде, в котором они
находились при работе в реальном режиме). В защищенном режиме
необходимо перезагрузить сегментные регистры, сняв при этом ограничения
с GS, и сразу же вернуться в реальный режим DOS, сбросив в ноль бит РЕ.
Длительное пребывание в защищенном режиме нежелательно, поскольку
переключение в него выполнялось по упрощенной схеме: таблица
прерываний не создавалась, а сами прерывания были просто отключены.
После выполнения процедуры SetLAddrModeForGS обязательно
следует отменить замыкание адресного пространства, то есть разблокировать
адресную линию А20, которая управляется контроллером клавиатуры. Для
этого необходимо послать в порт А контроллера соответствующую команду.
Посылка команды осуществляется при помощи Enable_A20 и
Wait8042Buffer Empty.
Набор подпрограмм, необходимых для переключения сегментного регистра GS в режим линейной адресации, показан в листинге 2.1 [1]. Как сказано выше, перезапись содержимого теневого регистра процессора возможна только в защищенном режиме, а переход в этот режим, как видно из листинга, требует ряда дополнительных операций, выполняемых процедурой Initialization. В частности, нужно перенастроить на специально выделенные в кодовом сегменте области данных регистры DS, SS и SP. В момент перенастройки регистров стека должны быть запрещены прерывания, поскольку некоторые обработчики прерываний пишут информацию в стек прерываемой программы. Процедура SetLAddrModeForGS, непосредственно осуществляющая перенастройку регистра GS в режим линейной адресации, воспроизводит (с незначительными изменениями) метод Родена. Прежде чем осуществить переключение, нужно вначале подготовить таблицу GDT (настроить на текущие сегменты кода и данных) и загрузить ее. Затем нужно войти в защищенный режим — установить в единицу бит РЕ регистра CR0, а остальные разряды сохранить без изменений (в том виде, в котором они находились при работе в реальном режиме). В защищенном режиме необходимо перезагрузить сегментные регистры, сняв при этом ограничения с GS, и сразу же вернуться в реальный режим DOS, сбросив в ноль бит РЕ. Длительное пребывание в защищенном режиме нежелательно, поскольку переключение в него выполнялось по упрощенной схеме: таблица прерываний не создавалась, а сами прерывания были просто отключены. После выполнения процедуры SetLAddrModeForGS обязательно следует отменить замыкание адресного пространства, то есть разблокировать адресную линию А20, которая управляется контроллером клавиатуры. Для этого необходимо послать в порт А контроллера соответствующую команду. Посылка команды осуществляется при помощи Enable_A20 и Wait8042Buffer Empty. 50
Страницы
- « первая
- ‹ предыдущая
- …
- 48
- 49
- 50
- 51
- 52
- …
- следующая ›
- последняя »