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

UptoLike

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

35
после чего можно будет завершить программу обычным образом. Перейти
в реальный режим можно разными способами. Можно, например,
осуществить сброс процессора, заслав команду FEh в порт 64h
контроллера клавиатуры. Эта команда возбуждает сигнал на одном из
выводов контроллера клавиатуры, который, в конечном счете, приводит к
появлению сигнала сброса на выводе RESET микропроцессора. Этот
способ (единственный для 286 процессора) неудобен тем, что для
выполнения сброса необходимо несколько микросекунд. Если выполнять
таким образом переход в реальный режим достаточно часто, можно
потерять много времени.
В нашем примере переход в реальный режим осуществляется
простым сбросом младшего бита в управляющем регистре CR0.
Если просто перейти в реальный режим сбросом бита 0 в регистре
CR0, в теневых регистрах останутся дескрипторы защищенного режима, и
при первом же обращении к любому сегменту программы возникнет
исключение общей защиты, так как ни один из определенных ранее
сегментов не имеет границы FFFh. Так как обработка исключений не
производится, произойдет сброс процессора и перезагрузка компьютера,
так как в данном случае не настраивался байт состояния перезагрузки, и не
заполнялись соответствующие ячейки области данных BIOS.
Следовательно, перед переходом в реальный режим необходимо исправить
дескрипторы всех используемых сегментов: кодов, данных, стека и
видеобуфера. Сегментные регистры FS и GS не использовались, поэтому о
них можно не заботиться.
В строках 118 – 121 в поля границ всех четырех дескрипторов
записывается значение FFFFh, а в строках 124 – 129 выполняется загрузка
селекторов в сегментные регистры, что приводит к перезаписи
содержимого теневых регистров. Так как сегментный регистр CS
программно недоступен, его загрузку приходится опять выполнять с
после чего можно будет завершить программу обычным образом. Перейти
в реальный режим можно разными способами. Можно, например,
осуществить сброс процессора, заслав команду FEh в порт 64h
контроллера клавиатуры. Эта команда возбуждает сигнал на одном из
выводов контроллера клавиатуры, который, в конечном счете, приводит к
появлению сигнала сброса на выводе RESET микропроцессора. Этот
способ (единственный для 286 процессора) неудобен тем, что для
выполнения сброса необходимо несколько микросекунд. Если выполнять
таким образом переход в реальный режим достаточно часто, можно
потерять много времени.
     В нашем примере переход в реальный режим осуществляется
простым сбросом младшего бита в управляющем регистре CR0.
     Если просто перейти в реальный режим сбросом бита 0 в регистре
CR0, в теневых регистрах останутся дескрипторы защищенного режима, и
при первом же обращении к любому сегменту программы возникнет
исключение общей защиты, так как ни один из определенных ранее
сегментов не имеет границы FFFh. Так как обработка исключений не
производится, произойдет сброс процессора и перезагрузка компьютера,
так как в данном случае не настраивался байт состояния перезагрузки, и не
заполнялись       соответствующие   ячейки       области     данных   BIOS.
Следовательно, перед переходом в реальный режим необходимо исправить
дескрипторы всех используемых сегментов: кодов, данных, стека и
видеобуфера. Сегментные регистры FS и GS не использовались, поэтому о
них можно не заботиться.
     В строках 118 – 121 в поля границ всех четырех дескрипторов
записывается значение FFFFh, а в строках 124 – 129 выполняется загрузка
селекторов    в   сегментные   регистры,   что    приводит    к   перезаписи
содержимого теневых регистров. Так как сегментный регистр CS
программно недоступен, его загрузку приходится опять выполнять с


                                      35