"Роберт Джордайн. Справочное пособие программиста - 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 ;получение сегмента ком. строки .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, где при инициализации записывается |
|
|