ВУЗ:
Составители:
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
Страницы
- « первая
- ‹ предыдущая
- …
- 33
- 34
- 35
- 36
- 37
- …
- следующая ›
- последняя »