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