ВУЗ:
Составители:
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
- …
- следующая ›
- последняя »