5.7.4. Фн 4Bh - Загрузить или выполнить программу

Error message

Notice: Undefined index: add term path in hansel_get_breadcrumbs() (line 524 of /data/sites/msdosworld.ru/www/sites/all/modules/hansel/hansel.module).

      Вход: AH = 4Bh

            DS:DX = адрес ASCIIZ-спецификации файла

            ES:BX = адрес блока параметров исполнителя (EPB)

            AL = 0 - загрузить и выполнить программу

                 3 - загрузить перекрытия

 

      Выход:  AX  =  код   ошибки  (1,2,3,5,8,10  или  11),  если

                     установлен флаг CF

 

      Описание:  Эта  фн  позволяет  одной  программе  (родителю)

 выполнить другую программу (потомка) и получить управление после

 завершения последней.

 

      DS:DX должны указывать  на строку вида "d:\путь\имя.тип",0,

 заданную  спецификацию файла  программы-потомка. Если  имя диска

 или путь опущены, то принимаются текущие значения.

 

      ES:BX  указывает  на  блок  параметров  исполнения,  формат

 которого зависит от номера подфункции в AL.

 

 

      Подфн 00h: Выполнить программу:

 

      Поскольку  родительский процесс  получает при  загрузке всю

 свободную память, перед вызовом  этой подфн Вы должны освободить

 часть памяти. Обычно порядок обращения к подфн 00h таков:

 

      1. Задать  ES = системный адрес  PSP, BX = размер  памяти в

 параграфах,  необходимый  Вашей  программе,  и  вызвать  фн  4Ah

 (освободить память).

 

      2.  Заслать  в  DS:DX  адрес  строки,  задающей имя файла с

 загружаемой программой.

 

      3. Сформировать блок EPB (см. ниже).

 

      4.  Сохранить  текущие  значения  SS,  SP,  DS,  ES и DTA в

 переменных, доступных относительно регистра CS (это единственный

 сегментный регистр, который не разрушается при обращении к подфн

 00h).

 

      5. Вызвать фн 4Bh с AL=0.

 

      6. Восстановить SS и SP.

 

      7. Проанализировать флаг CF.

 

      8. Восстановить DS, ES и адрес DTA, если это необходимо.

 

      9. Проверить  код завершения процесса-потомка  через фн 4Dh

 (если это имеет смысл).

 

      Блок параметров исполнения для подфн 00h имеет вид:

 

 Смещение Длина Содержание       Комментарий

 ───────────────┬───────┬────────────────────────────────────────

  +0        2          │ Сегментный адрес контекста для потомка

                ├───────┴───────┐(0=наследовать текущий)

  +2        4                  │ Длинный адрес командной строки

                ├───────────────┤ (для PSP+80h)

  +6        4                  │ Длинный адрес FCB1 (для PSP+5Ch)

                ├───────────────┤

  +0Ah      4                  │ Длинный адрес FCB2 (для PSP+6Ch)

                └───────────────┘

  0Eh       Длина EPB

 

      Примечание:  Формирование  блока  EPB  состоит из следующих

 шагов:

 

      -  подготовить контекст  и занести  его адрес  в EPB+0 (или

 обнулить  EPB+0,  чтобы  процесс-потомок  получил копию текущего

 контекста);

 

      - подготовить командную строку и заменить ее адрес в EPB+2;

 если  командная строка  не нужна,  то она  должна иметь  вид: db

 0,0Dh (см. описание PSP);

 

      - если выполняемый процесс  требует FCB, то подготовить два

 неоткрытых   FCB   и   занести   адреса   в   EPB+6   и  EPB+0Ah

 соответственно.

 

      Подфн 03h: Загрузить перекрытие:

 

      Эта  подфн позволяет  загрузить файл  перекрытия в  память.

 DS:DX должны указывать на ASCIIZ-строку, содержащую спецификацию

 файла  перекрытия,  а  ES:BX  -  на  блок параметров исполнения,

 описанный  ниже. Главное  назначение этой  функции -  считывание

 заголовка   EXE-файла   и   выполнение   необходимой   настройки

 сегментов. Эта подфн не создает PSP для перекрытия.

 

      Блок параметров исполнения для подфн 03h имеет вид:

 

 Смещение Длина Содержимое    Комментарий

 ───────────────┬───────────┬────────────────────────────────────

  +0        2              │ Сегмент, в который нужно загрузить

                ├───────────┤ файл

  +2        2              │ Настройка для обращений к сегментам

                └───────────┘(только для EXE-файлов)

   4        Длина EPB

 ────────────────────────────────────────────────────────────────

 

      Примечания:

 

      1. Эта функция использует загрузчик из COMMAND.COM. Поэтому

 она  может   потерпеть  неудачу,  если   ДОС  не  сможет   найти

 COMMAND.COM  на диске.  Во избежание  этого Вы  должны занести в

 переменную   контекста   COMSPEC   =   правильное   указание  на

 COMMAND.COM.

 

      2. Вместо  того, чтобы создавать свои  собственные FCB (как

 это  требует  блок  EPB  в  подфн  00h),  Вы  можете загрузить и

 выполнить копию  COMMAND.COM, использую опцию  /C. Например, для

 выполнения  программы FORMAT.COM,  зашлите в  DS:DX адрес строки

 "\COMMAND.COM",0,  а в  EPB+2 -  адрес командной  строки 0Eh,"/C

 format  a: /S/4",0Dh.   В   этом   случае  интерпретатор  команд

 использует   небольшую  память   (около  4К).   Для  правильного

 обращения   к  COMMAND.COM   извлеките  его   местоположение  из

 переменной контекста COMSPEC=.

 

      3.  Все  номера  файлов,  открытых  родительским процессом,

 доступны процессу-потомку.  Помимо всего прочего,  это означает,

 что   Вы   можете   переназначить   стандартный   ввод  и  вывод

 процесса-потомка.   Исключение  составляют   те  файлы,  которые

 открыты с установленным битом наследования (см. 5.9.1).

 

      См. также: Фн 4Dh

                 Фн 4Ch

                 Фн 31h

                 Запуск и завершение программ

 

 

Вы находитесь в разделе: 

Добавить коментарий