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

получаете запрос MS DOS. В этот момент можно использовать любую
из утилит DOS, включая командные файлы. Для возврата в вызвавшую
программу надо ввести EXIT.

Средний уровень.

В этом случае к примеру, приведенному в [1.3.2] нужно добавить
командную строку. Обычно она начинается с байта длины строки,
затем следует сама командная строка и, наконец, код ASCII 13. При
передаче команды COMMAND.COM Вы должны указать /C перед строкой
(см. пункт "Вызов вторичного командного процессора" руководства
по MS DOS). Вы должны также указать накопитель, на котором нахо-
дится COMMAND.COM, поместив имя накопителя в начале командной
строки. Чтобы вывести каталог накопителя A:, а COMMAND.COM при
этом находится на накопителе B:, нужна строка:

COMMAND_LINE DB 12,'B: /C DIR A:',13

Следующий кусочек кода устанавливает адрес командной строки в
блок параметров, используемый в примере [1.3.2]:

LEA BX,PARAMETERS ;получение адреса блока пар-ров
MOV AX,OFFSET COMMAND_LINE ;получение смещения ком. строки
MOV [BX]+2,AX ;пересылка в 1-е 2 байта блока
MOV AX,SEG COMMAND_LINE ;получение сегмента ком. строки
MOV [BX]+4,AX ;пересылка во 2-е 2 байта блока


.h3 1.3.4 Сохранение программы в памяти после завершения.
---------------------------------------------------------

Программы, оставленные резидентными в памяти, могут служить в
качестве утилит для других программ. Обычно такие программы вызы-
ваются через неиспользуемый вектор прерывания. MS DOS рассматри-
вает такие программы как часть операционной системы, защищая их
от наложения других программ, которые будут загружены впоследст-
вии. Резидентные программы обычно пишутся в форме COM, что обсуж-
дается в пункте [1.3.6]. Программы, написанные в форме EXE оста-
вить резидентными в памяти немного труднее.
Завершение программы прерыванием 27H оставляет ее резидентной
в памяти. CS должен указывать на начало PSP для того, чтобы эта
функция работала правильно. В программах COM, CS сразу устанавли-
вается соответствующим образом, поэтому надо просто завершить
программу прерыванием 27H. В программах EXE , CS первоначально
указывает на первый байт, следующий за PSP (т.е. 100H). При нор-
мальном завершении EXE программы последняя инструкция RET вытал-
кивает из стека первые положенные туда значения: PUSH DS / MOV
AX,0 / PUSH AX. Поскольку DS первоначально указывает на начало
PSP, то при получении этих значений из стека счетчик команд ука-
зывает на смещение 0 в PSP, где при инициализации записывается