CodeNet / Платформы / Другие платформы / DOS / Прерывания DOS и BIOS
DOS Fn 4bH: выполнить или загрузить программу -- EXEC
Вход
- AH = 4bH
- DS:DX = адрес строки ASCIIZ с именем файла, содержащего программу
- ES:BX = адрес EPB (EXEC Parameter Block - блока параметров EXEC)
- AL = 0 = загрузить и выполнить
- AL = 3 = загрузить программный оверлей
Выход
- AX = код ошибки если CF установлен
Описание:
предоставляет средства одной программе (родителю) вызвать другую программу (ребенка), которая по завершению возвратит управление родителю.
DS:DX указывает на строку ASCIIZ в форме: "d:\путь\имяфайла",0. если диск или путь опущены, они подразумеваются по умолчанию.
ES:BX указывает на блок памяти, подготовленный как EPB, формат которого зависит от запрошенной подфункции в AL.
AL=0 EXEC: так как родительская программа первоначально получает всю доступную память в свое распоряжение, вы должны освободить часть памяти через функцию 4aH до вызова EXEC (AL=0). обычная последовательность:
- Вызовите функцию 4aH с ES=сегменту PSP и BX=минимальному объему памяти, требуемой вашей программе (в параграфах).
- Подготовьте строку ASCIIZ с именем вызываемого программного файла и установите DS:DX на первый символ этой строки.
- Подготовьте блок параметров EXEC со всеми необходимыми полями.
- Сохраните текущие значения SS, SP, DS, ES и DTA в переменных, адресуемых через регистр CS (CS - это единственная точка для ссылок после того, как EXEC вернет управление от ребенка).
- Выдайте вызов EXEC с AL=0.
- Восстановите локальные значения SS и SP.
- Проверьте флаг CF, чтобы узнать, не было ли ошибки при EXEC.
- Восстановите DS, ES и локальную DTA, если необходимо.
- Проверьте код выхода через функцию 4dH WAIT (если надо).
Все открытые файлы дублируются, так что ребенок может обрабатывать данные как через описатели файлов, так и через стандартный в/в. режимы доступа описателей дублируются, но любые активные блокировки файлов не будут относиться к ребенку. См. функцию 5cH. после возврата из ребенка, векторы INT 22H Terminate, INT 23H Ctrl-Break и INT 24H Critical Error восстанавливаются в их предыдущие значения.
AL=3 LOAD: Эта подфункция используется для загрузки "оверлея".
DS:DX указывает на ASCIIZ имя файла, а ES:BX указывает на "LOAD"-версию блока параметров EXEC. Главное значение этой подфункции в том, что она считывает заголовок EXE и выполняет необходимые перемещения сегментов, как это требуется для программ .EXE.
Замечания:
Эта функция использует программу-загрузчик из COMMAND.COM, который транзитен в DOS 2.x (и, возможно, уже перекрыт программой). В этом случае возникнет ошибка, если DOS не найдет файл COMMAND.COM. Вы должны обеспечить корректную строку COMSPEC= в окружении перед вызовом этой функции.
Вместо разбора собственных FCB (как требуется для EPB), вы можете найти удобным загрузить и выполнить вторичную копию файла COMMAND.COM, используя опцию /C. например, чтобы выполнить программу FORMAT.COM, установите DS:DX на адрес строки ASCIIZ: "\command.com",0 и установите EPB+2 на сегмент и смещение следующей строки команд: 0eH,"/c format a:/s/4",0dH такой вторичный интерпретатор команд использует очень мало памяти (около 4K). Вы можете поискать в окружении DOS строку COMSPEC=, чтобы установить точное местоположение файла COMMAND.COM.