ВУЗ:
Составители:
60
Функция 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). Обычная последовательность:
1. Вызовите функцию 4ah с ES=сегменту PSP и BX=минимальному
объему памяти, требуемой вашей программе (в параграфах).
2. Подготовьте строку ASCIIZ со спецификацией вызываемого
программного файла и установите DS:DX на первый символ этой
строки.
3. Подготовьте Блок Параметров EXEC со всеми необходимыми полями.
4. Сохраните текущие значения SS, SP, DS, ES и DTA в переменных,
адресуемых через регистр CS (CS – это единственная точка для ссылок
после того, как EXEC вернет управление от порожденного процесса).
5. Выдайте вызов EXEC с AL=0.
6. Восстановите локальные значения SS и SP.
7. Проверьте флаг CF, чтобы узнать, не было ли ошибки
при EXEC.
8. Восстановите DS, ES и локальную DTA, если это необходимо.
9. Проверьте код выхода через функцию 4dh WAIT (если надо).
Все открытые файлы дублируются, так что порожденный процесс может
обрабатывать данные как через дескрипторы файлов, так и через
стандартный ввод/вывод. Режимы доступа дескрипторов дублируются, но
любые активные блокировки файлов не будут относиться к порожденному
процессу (см. функцию 5ch). После возврата из порожденного процесса, в
векторах int 22h Terminate, int 23h CtrlBreak и int 24h Critical Error
восстанавливаются их исходные значения. AL=3 LOAD: Эта подфункция
используется для загрузки "оверлея". DS:DX указывает на ASCIIZ имя
файла, а ES:BX указывает на "LOAD"-версию Блока Параметров EXEC.
60
Функция 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). Обычная последовательность:
1. Вызовите функцию 4ah с ES=сегменту PSP и BX=минимальному
объему памяти, требуемой вашей программе (в параграфах).
2. Подготовьте строку ASCIIZ со спецификацией вызываемого
программного файла и установите DS:DX на первый символ этой
строки.
3. Подготовьте Блок Параметров EXEC со всеми необходимыми полями.
4. Сохраните текущие значения SS, SP, DS, ES и DTA в переменных,
адресуемых через регистр CS (CS – это единственная точка для ссылок
после того, как EXEC вернет управление от порожденного процесса).
5. Выдайте вызов EXEC с AL=0.
6. Восстановите локальные значения SS и SP.
7. Проверьте флаг CF, чтобы узнать, не было ли ошибки при EXEC.
8. Восстановите DS, ES и локальную DTA, если это необходимо.
9. Проверьте код выхода через функцию 4dh WAIT (если надо).
Все открытые файлы дублируются, так что порожденный процесс может
обрабатывать данные как через дескрипторы файлов, так и через
стандартный ввод/вывод. Режимы доступа дескрипторов дублируются, но
любые активные блокировки файлов не будут относиться к порожденному
процессу (см. функцию 5ch). После возврата из порожденного процесса, в
векторах int 22h Terminate, int 23h CtrlBreak и int 24h Critical Error
восстанавливаются их исходные значения. AL=3 LOAD: Эта подфункция
используется для загрузки "оверлея". DS:DX указывает на ASCIIZ имя
файла, а ES:BX указывает на "LOAD"-версию Блока Параметров EXEC.
Страницы
- « первая
- ‹ предыдущая
- …
- 58
- 59
- 60
- 61
- 62
- …
- следующая ›
- последняя »
