5.1.12. Int 2Fh - Мультиплексное прерывание

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 = номер процесса:

            01h = резидентная часть команды PRINT  (ДОС 3.0)

            02h = резидентная часть команды ASSIGN (ДОС 3.2)

            10h = резидентная часть команды SHARE  (ДОС 3.2)

            B7h = резидентная часть команды APPEND (ДОС 3.3)

            03h-7Fh - зарезервированы для ДОС

            80h-FFh - свободно

        AL = номер подфункции

        прочие регистры - определяются подфункцией

 

 Выход: AX = код ошибки, если флаг CF=1 (для процессов ДОС)

        AL = состояние процесса (для процессов ДОС):

             00h = не загружен, но можно загрузить

             01h = не загружен и нельзя загрузить

             FFh = загружен

 

      Этот   вектор  (0:0BCh)   предназначен  для   использования

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

 определяет общий интерфейс взаимодействия двух процессов. Каждый

 процесс,    использующий   это    прерывание   (он    называется

 мультиплексным), должен при загрузке  в память сохранить текущее

 значение  этого вектора  и заслать  в него  свое собственное.  В

 дальнейшем, каждый  процесс в мультиплексной  цепочке сравнивает

 регистр AH со своим номером  и, если это номер другого процесса,

 передает управление по сохраненному адресу Int 2Fh.

 

      Программа PRINT (AH=1 для ДОС 3.x и AH - любое для ДОС 2.x)

 

      Интерфейс с программой фоновой печати, имеет подфункции 0-5.

 

 AL = 0  Получить состояние процесса. Возвращает состояние  в  AL

         (см. выше).

 AL = 1  Поставить   файл  в  очередь  печати.  На  входе   DS:DX

         указывает на описатель файла:

         смещение 0 = уровень (в  ДОС 3.x всегда 0)

         смещение 1 = длинный    адрес ASCIIZ-строки,  содержащей

                      спецификацию  файла   (групповое  имя файла

                      недопустимо).

 AL = 2  Удалить  файл(ы)   из  очереди   печати.  На входе DS:DX

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

         файла, которая  может содержать групповое имя файлов.

 AL = 3  Очистить  очередь печати (и прекратить фоновую печать).

 AL = 4  Опрос состояния очереди. Эта подфункция приостанавливает

         печать и возвращает информацию об очереди. На выходе:

         DX = количество  неудачных  попыток напечатать последний

              символ;

         DS:SI указывает на  блок  описания  очереди.  Этот  блок

               состоит из  64-байтовых  ASCIIZ-строк,  содержащих

               спецификации   файлов  в  очереди.  Файл,  который

               печатается  в  данный  момент, стоит первым. Конец

               блока отмечен  пустой  спецификацией файла (байтом

               00h).

 AL = 5  Конец опроса. Продолжает печать файлов очереди.

 

      Если  при возврате  из  любой  подфункции бит  CF=1, то  AX

 содержит код ошибки:

 

      1   Неверный номер функции

      2   Файл не найден

      3   Путь не найден

      4   Слишком много открытых файлов

      5   Отказ в доступе к файлу

      6   Неверный номер файла

      8   Очередь полна

      9   Занято


     0Ch  Слишком длинная спецификация файла (> 64 байтов)

     0Fh  Неверный дисковод

 

      Программы ASSIGN (AH=2), SHARE (AH=10h) и APPEND (AH=B7h)

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

 

      Для  этих   программ  определена  только   подфункция  AL=0

 (получить состояние процесса).

 

      Создание мультиплексных процессов пользователя

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

 

      Техническое  описание  ДОС  рекомендует  использовать   это

 прерывание для установки и доступа пользовательских  резидентных

 программ. Дело в том,  что, подменяя другие вектора  прерываний,

 Вы  идете  на  определенный  риск.   Если  же  Вы  включаетесь в

 мультиплексную цепочку, ДОС знает об этом и Ваш вектор не  будет

 перекрыт другим обработчиком.

 

      Потенциальная проблема использования Int 2Fh состоит в том,

 как  выбрать  номер  для   своего  процесса.  Всегда  существует

 опасность, что другой, ранее  установленный процесс имеет тот же

 номер. Это приводит к  необходимости довольно больших логических

 проверок - а со своим ли процессом Вы имеете дело?

 

      Требования к мультиплексному процессу:

 

      -  он обязан  обрабатывать подфункцию  AL=0 описанным  выше

 образом;

      -  он  не  должен  использовать  подфункции  F8h-FFFh  (они

 зарезервированы для ДОС);

      -  если он  обращается к  функциям или  прерываниям ДОС или

 выполняется в  режиме разрешенных прерываний, то  его код должен

 быть реентерабельным.

 

      См. также: Запуск и завершение программ.

 

 

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

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