Системное программное обеспечение. Особенности программирования 32-разрядных процессоров. Рощин А.В. - 32 стр.

UptoLike

Составители: 

32
работы программы прерывания придется запретить. Запрет всех
аппаратных прерываний осуществляется командой cli (строка 77).
В строках 78, 79 в порт 70h засылается код 80h, который запрещает
немаскируемые прерывания (которые не запрещаются командой cli).
В строках 81...83 осуществляется перевод процессора в защищенный
режим. Этот перевод можно выполнить различными способами. В
рассматриваемом примере для этого используется команда mov. Сначала
содержимое управляющего CR0 регистра считывается в аккумулятор EAX,
затем его младший бит устанавливается в 1 с помощью команды or, затем
содержимое аккумулятора опять записывается в управляющий регистр
CR0 с уже модифицированным младшим битом. Все последующие
команды выполняются уже в защищенном режиме.
Хотя защищенный режим установлен, однако действия по настройке
системы еще не закончены. Действительно, во всех используемых в
программе сегментных регистрах хранятся не селекторы дескрипторов
сегментов, а базовые сегментные адреса, не имеющие смысла в
защищенном режиме.
Рисунок 1.11 – Сегментные и теневые регистры
Отсюда можно сделать вывод, что после перехода в защищенный
режим программа не должна работать, так как в регистре CS пока еще нет
селектора сегмента команд, и процессор не может обращаться к этому
сегменту. В действительности это не совсем так.
работы   программы    прерывания    придется      запретить.   Запрет   всех
аппаратных прерываний осуществляется командой cli (строка 77).
     В строках 78, 79 в порт 70h засылается код 80h, который запрещает
немаскируемые прерывания (которые не запрещаются командой cli).
     В строках 81...83 осуществляется перевод процессора в защищенный
режим. Этот перевод можно выполнить различными способами. В
рассматриваемом примере для этого используется команда mov. Сначала
содержимое управляющего CR0 регистра считывается в аккумулятор EAX,
затем его младший бит устанавливается в 1 с помощью команды or, затем
содержимое аккумулятора опять записывается в управляющий регистр
CR0 с уже модифицированным младшим битом. Все последующие
команды выполняются уже в защищенном режиме.
     Хотя защищенный режим установлен, однако действия по настройке
системы еще не закончены. Действительно, во всех используемых в
программе сегментных регистрах хранятся не селекторы дескрипторов
сегментов, а базовые сегментные адреса, не имеющие смысла в
защищенном режиме.




             Рисунок 1.11 – Сегментные и теневые регистры

     Отсюда можно сделать вывод, что после перехода в защищенный
режим программа не должна работать, так как в регистре CS пока еще нет
селектора сегмента команд, и процессор не может обращаться к этому
сегменту. В действительности это не совсем так.


                                      32