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

UptoLike

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

36
помощью искусственно сформированной команды дальнего перехода
(строки 133 – 135).
После настройки всех использованных в защищенном режиме
сегментных регистров, можно сбрасывать бит 0 управляющего регистра
CR0 (строки 137 – 139). После перехода в реальный режим опять надо
выполнить искусственно сформированную команды дальнего перехода для
того, чтобы очистить очередь команд в блоке предвыборки процессора и
загрузить в регистр CS вместо хранящегося там селектора обычный
сегментный адрес регистра команд (строки 140 – 142).
Искусственно сформированная команда дальнего перехода передает
управление на метку return.
Теперь процессора опять работает в реальном режиме. При этом,
хотя в сегментных регистрах DS, ES и SS остались недействительные для
реального режима селекторы, программа пока работает корректно, так как
в теневых регистрах находятся правильные линейные адреса (оставшиеся
от защищенного режима) и законные для реального режима границы
(загруженные в строках 118 – 121). Однако, если в программе встретится
любая команда сохранения или восстановления какого-либо сегментного
регистра, нормальное выполнение программы нарушится, так как в
сегментном регистре окажется не сегментный адрес, как это должно быть в
реальном режиме, а селектор. Это значение будет трактоваться
процессором как сегментный адрес, что приведет в дальнейшем к неверной
адресации соответствующего сегмента.
Если даже в оставшемся тексте программы и нет команд чтения или
записи сегментных регистров, неприятности все равно возникнут, так как
простой вызов DOS'овского прерывания int 21h приведет к этим
неприятностям, так как диспетчер DOS выполняет сохранение и
восстановление регистров (в том числе и сегментных) при выполнении
функций DOS.
помощью искусственно сформированной команды дальнего перехода
(строки 133 – 135).
      После настройки всех использованных в защищенном режиме
сегментных регистров, можно сбрасывать бит 0 управляющего регистра
CR0 (строки 137 – 139). После перехода в реальный режим опять надо
выполнить искусственно сформированную команды дальнего перехода для
того, чтобы очистить очередь команд в блоке предвыборки процессора и
загрузить в регистр CS вместо хранящегося там селектора обычный
сегментный адрес регистра команд (строки 140 – 142).
      Искусственно сформированная команда дальнего перехода передает
управление на метку return.
      Теперь процессора опять работает в реальном режиме. При этом,
хотя в сегментных регистрах DS, ES и SS остались недействительные для
реального режима селекторы, программа пока работает корректно, так как
в теневых регистрах находятся правильные линейные адреса (оставшиеся
от защищенного режима) и законные для реального режима границы
(загруженные в строках 118 – 121). Однако, если в программе встретится
любая команда сохранения или восстановления какого-либо сегментного
регистра, нормальное выполнение программы нарушится, так как в
сегментном регистре окажется не сегментный адрес, как это должно быть в
реальном   режиме,    а   селектор.   Это   значение   будет   трактоваться
процессором как сегментный адрес, что приведет в дальнейшем к неверной
адресации соответствующего сегмента.
      Если даже в оставшемся тексте программы и нет команд чтения или
записи сегментных регистров, неприятности все равно возникнут, так как
простой вызов DOS'овского прерывания int 21h приведет к этим
неприятностям, так как диспетчер DOS выполняет сохранение и
восстановление регистров (в том числе и сегментных) при выполнении
функций DOS.


                                       36