"Роберт Джордайн. Справочное пособие программиста - 2 (ассемблер, операционная система MS DOS)" - читать интересную книгу автора

прерывания 16H. После того как это сделано, в новой процедуре
может содержаться любой код, как до, так и после вызова прерыва-
ния 60H. На рис. 1-3 показана диаграмма этой процедуры. Вот крат-
кая сводка необходимых действий:

1. Создать новую процедуру, вызывающую прерывание 60H.
2. Перенести вектор прерывания для 16H в 60H.
3. Изменить вектор 16H, чтобы он указывал на новую процедуру.
4. Завершить программу, оставляя ее резидентной [1.3.4].


.h2 Раздел 3. Управление программами.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Большинство программ загружаются в память, запускаются, а
затем удаляются операционной системой при завершении. Языки высо-
кого уровня обычно не имеют альтернативы. Но для программистов на
ассемблере имеется другая возможность и данный раздел демонстри-
рует ее. Некоторые программы действуют как драйверы устройств
или драйверы прерываний и они должны быть сохранены в памяти
("резидентными") даже после их завершения (вектора прерываний
обеспечивают механизм, посредством которого последующие программы
могут обращаться к резидентным процедурам). Иногда программе
необходимо запустить из себя другую программу. На самом деле DOS
позволяет программе загрузить в память вторую копию COMMAND.COM,
которая может использована как средство интерфейса с пользовате-
лем или выполнения команд типа COPY или DIR.
Программы могут быть в двух форматах: .EXE или .COM. Программы
первого типа могут быть больше 64K, но они требуют некоторой
обработки перед тем, как DOS загрузит их в память. С другой сто-
роны COM программы существуют прямо в том формате, который нужен
для загрузки в память. COM программы особенно полезны для корот-
ких утилит. В обоих случаях код, составляющий программу, предва-
ряется в памяти префиксом программного сегмента (PSP). Это об-
ласть размером 100H байт, которая содержит информацию необходимую
DOS для работы программы; PSP также обеспечивает место для файло-
вых операций ввода/вывода [5.3.5]. При загрузке EXE файла и DS и
ES указывают на PSP. Для COM файлов CS также сначала указывает на
PSP. Отметим, что MS DOS 3.0 имеет функцию, которая возвращает
номер сегмента PSP. Это функция 62H прерывания 21H; ей ничего не
надо подавать на входе, а в BX возвращается номер параграфа.
Одна из причин, по которой интересно положение PSP, состоит в
том, что его первое слово содержит номер прерывания DOS, которое
будет приводить к завершению программы. Когда выполняется послед-
ний оператор RET программы, то значения на вершине стека указы-
вают счетчику команд (регистр IP) на начало PSP, таким образом
код завершения выполняется как следующая инструкция программы.
Дальнейшее обсуждение этого смотрите в пунктах [1.3.4] и [1.3.6].

Для справки приводим значение полей PSP: