ВУЗ:
Составители:
31
управляющего регистра CR0. Так как встретить сейчас «живой» 286
процессор практически не реально, воспользуемся именно таким
способом.
Всего в микропроцессорах i386 и выше имеется 4 программно
адресуемых управляющих регистра CR0, CR1, CR2 и CR3 [8]. Регистр CR1
зарезервирован, регистры CR2 и CR3 управляют страничным
преобразованием, которое в рассматриваемой программе не используется,
а регистр CR0 содержит набор управляющих битов, из которых нам
интересны биты 0 (включение и выключение защищенного режима) и 31
(разрешение страничного преобразования).
После сброса процессора оба эти бита сброшены, благодаря чему
процессор начинает работать в реальном режиме с выключенным
страничным преобразованием. Установка младшего бита CR0 в 1
переводит процессор в защищенный режим, а сброс его возвращает
процессор в реальный режим. Следует отметить, что младшая половина
регистра CR0 совпадает со словом состояния 286 процессора, поэтому
команды чтения и записи в регистр CR0 аналогичны по результату
командам smsw и lmsw, которые сохранены в старших процессорах из
соображений совместимости.
Еще один важный шаг, который необходимо выполнить перед
переходом в защищенный режим, заключается в запрете всех аппаратных
прерываний. Дело в том, что в защищенном режиме процессор выполняет
процедуру обработки прерывания иначе, чем в реальном. При поступлении
сигнала прерывания процессор не обращается к таблице векторов
прерываний в первом килобайте памяти, как в реальном режиме, а
извлекает адрес программы обработки прерывания из таблицы
дескрипторов прерываний, построенной аналогично таблице глобальных
дескрипторов и располагаемой в программе пользователя (или в
операционной системе). В нашем примере такой таблицы нет, и на время
управляющего регистра CR0. Так как встретить сейчас «живой» 286 процессор практически не реально, воспользуемся именно таким способом. Всего в микропроцессорах i386 и выше имеется 4 программно адресуемых управляющих регистра CR0, CR1, CR2 и CR3 [8]. Регистр CR1 зарезервирован, регистры CR2 и CR3 управляют страничным преобразованием, которое в рассматриваемой программе не используется, а регистр CR0 содержит набор управляющих битов, из которых нам интересны биты 0 (включение и выключение защищенного режима) и 31 (разрешение страничного преобразования). После сброса процессора оба эти бита сброшены, благодаря чему процессор начинает работать в реальном режиме с выключенным страничным преобразованием. Установка младшего бита CR0 в 1 переводит процессор в защищенный режим, а сброс его возвращает процессор в реальный режим. Следует отметить, что младшая половина регистра CR0 совпадает со словом состояния 286 процессора, поэтому команды чтения и записи в регистр CR0 аналогичны по результату командам smsw и lmsw, которые сохранены в старших процессорах из соображений совместимости. Еще один важный шаг, который необходимо выполнить перед переходом в защищенный режим, заключается в запрете всех аппаратных прерываний. Дело в том, что в защищенном режиме процессор выполняет процедуру обработки прерывания иначе, чем в реальном. При поступлении сигнала прерывания процессор не обращается к таблице векторов прерываний в первом килобайте памяти, как в реальном режиме, а извлекает адрес программы обработки прерывания из таблицы дескрипторов прерываний, построенной аналогично таблице глобальных дескрипторов и располагаемой в программе пользователя (или в операционной системе). В нашем примере такой таблицы нет, и на время 31
Страницы
- « первая
- ‹ предыдущая
- …
- 29
- 30
- 31
- 32
- 33
- …
- следующая ›
- последняя »