Программирование на ассемблере персональных ЭВМ класса IBM/PC-XT в операционной системе MS/DOS. Евсеева О.Н - 31 стр.

UptoLike

- 31 -
PUSH DS
MOV AX, 0
PUSH AX.
Поскольку DS первоначально указывает на начало PSP, то при
получении этих значений из стека счетчик команд указывает на сме-
щение 0 в PSP, где при инициализации записывается инструкция INT
20H. Поэтому INT 20H выполняется, а это стандартная функция для
завершения программы и передачи управления в DOS. Чтобы заставить
прерывание 27H работать в EXE программе надо поместить 27H во
второй байт PSP (первый содержит машинный код инструкции INT), а
затем завершить программу обычным RET.
Для обоих типов файлов, прежде чем выполнить прерывание 27H,
DX должен содержать смещение конца программы, отсчитываемое от
начала PSP.
Прерывания
Прерывание 20 - старый метод окончания программы. Этот век-
тор передает управление подпрограмме DOS, восстанавливающей адре-
са реакций на завершение, Ctrl-Break и фатальную ошибку такими,
какими они были до начала работы программы. Все буфера сбрасыва-
ются. Все файлы, длина которых была изменена программой, должны
быть закрыты до обращения к прерыванию 20. Если файл не закрыть,
его новая длина, дата и время не будут записаны в каталоге.
Чтобы после завершения программа выдала код возрата (или код
ошибки), она должна использовать операции 4C (выход) или 31 (за-
кончить и остаться резидентом). Эти два новых способа завершения
предпочтительнее обращения к прерыванию 20; коды, возвращаемые
ими, анализируются при обработке командных файлов.
При обращении к прерыванию 20, программа обязана установить
CS так, чтобы он указывал на начало ее Префикса Программного Сег-
мента.
21 - Обращение к операции DOS.
27 - Закончить и остаться резидентом. Это прерывание исполь-
зуется программами, остающимися в памяти после возврата управле-
ния в COMMAND.COM. Это старый способ остаться в памяти.
Имеется новая операция DOS, позволяющая заканчивающейся
программе передать код звершения в DOS, который может использо-