Кроме того, этот размер может
системе. Кроме того, этот размер может существенно возрастать при
использовании в DOS прерывания INT 27H, которое заканчивает
выполнение программы, но оставляет ее резидентной в памяти. При
этом программный загрузчик DOS должен адресоваться к сегментному
префиксу PSP той программы, которую он загружает. Проще всего
задать эту структуру данных с помощью отдельного оператора SEGMENT.
На Фиг. 6.13 показано объявление сегмента, которое можно
использовать в двух различных местах. Если бы можно было посмотреть
текст исходной программы для загрузчика DOS, то мы бы обнаружили
там подобное объявление. В случае программы, использующей структуру
.EXE, такая сегментация могла бы обеспечить доступ к переменным в
сегментном префиксе PSP. В приведенном на Фиг. 5.6 примере
программы с применением функций DOS, использовалась структура файла
типа .COM. Это позволяло нам обращаться к различным ячейкам
сегмента PSP через смещение относительно блока PSP. Задача весьма
облегчалась тем, что DOS загружала программу в тот сегмент, который
содержал PSP.
В случае .EXE-файла блок PSP находится не в том же сегменте,
что и команды программы. Так как при передаче управления программе
типа .EXE DOS устанавливает регистры DS и ES на сегмент PSP, то
имеет смысл обращаться с PSP как с отдельным сегментом. Приведенный
на Фиг. 6.13 фрагмент программы из сегмента CODE, показывает, как
можно обращаться к данным в блоке PSP.
Microsoft (R) Macro Assembler Version 5.00 1/1/80 04:03:31
Фиг. 6.13 Структура Программного Префикса Page 1-1
PAGE ,132
TITLE Фиг. 6.13 Структура Программного Префикса
0000 PROGRAM_SEGMENT_PREFIX SEGMENT
0000 0002[ INT_20 DB 2 DUP (?)
??
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий