Функции DOS

    Интерпретатор командных строк обеспечивает средства, необходимые

    для того, чтобы программа, написанная на языке ассемблера, начала

    выполняться.  Кроме того, DOS уже во время выполнения программы

    обеспечивает доступ к файловой системе с помощью механизма функций

    DOS.  В данном разделе объясняется, что представляют собой эти

    функции и как они могут быть использованы в программе.

 

      Программа использует функции DOS посредством программного

    прерывания. Благодаря этому, программа может вызывать

    соответствующую служебную программу, не зная ее адреса. Нужное

    прерывание задается программистом. А во время инициализации DOS

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

    чтобы они указывали на соответствующие подпрограммы. Следовательно,

    по мере получения других версий DOS нет необходимости вносить

    изменения в программы. На Фиг.5.3 приводятся векторы прерывания

    DOS.

 

             Прерывание      Действие

             ----------------------------------------------

              20H Окончание программы

              21H Вызов функции (см. Фиг. 5.5)

              22H Адрес завершения

              23H Адрес CTRL-BREAK

              24H Обработчик кртической ошибки

              25H Чтение с диска по абсолютному адресу

              26H Запись на диск по абсолютному адресу

              27H Завершить, но остаться резидентно

             ----------------------------------------------

 

               Фиг. 5.3 Прерывания DOS

      Некоторые прерывания фактически предназначены для

    пользовательских подпрограмм. Прерывания 22H, 23H и 24H являются

    указателями на подпрограммы, которые могут быть в программе

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

    выполняться при наступлении соответствующей ситуации. Например, при

    нажатии клавиши CTRL-BREAK DOS выполняет прерывание 23H. Обычно

    нажатие этой клавиши вызывает останов программы. Обычно DOS

    выполняет стандартную обработку соответствующих ситуаций. Если же

    программе нужно обрабатывать их иначе, то она может изменить вектор

    прерывания.

 

      В качестве примера рассмотрим прерывание 24H - обработку

    неустранимой ошибки. Всякий раз обнаруживая ошибку система

    инициирует прерывание. Обычно соответствующий вектор указывает на

    программу в DOS, которая выводит на дисплей сообщение об ошибке. В

    случае ошибки, связанной с диском, DOS выводит сообщение о дисковой

    ошибке. Пользователь может по своему усмотрению сделать повторную

    попытку выполнения операции, вызвавшей ошибку, либо закончить

    выполнение, либо пропустить операцию, вызвавшую ошибку.

    Предположим, например, что вы пишите программу форматирования

    дискет. Это операция, в ходе которой на поверхности дискеты

    происходит физическая разметка дорожек и секторов. Вместе с

    форматированием дискеты проверяется отсутствие сбойных участков.

    Последняя операция называется верификацией дискеты. Так как при

    верификации допускается присутствие на дискете одно-двух сбойных

    участков, то вы специальным образом помечаете эти участки, чтобы в

    дальнейшем их случайно не использовать. Данная программа

    форматирования заменяет обработку неустранимых ошибок. Вам не

    нужно, чтобы DOS выводила для пользователя сообщение об ошибке.

    Вместо этого вы хотите, чтобы обработка ошибки верификации

    происходила в самой программе, и соответствующий участок на диске

    помечался как сбойный. Для этого вы заменяете вектор прерывания в

    ячейке 0:0090H(24H*4) указателем на свою подпрограмму обработки

    ошибок. Когда DOS зафиксирует дисковую ошибку, ваша подпрограмма

    может пометить это место как сбойный участок, никак не уведомляя об

    этом пользователя.

 

      Прерывания 25H и 26H связывают между собой две части системы. С

    точки зрения своей файловой структуры DOS фактически состоит из

    двух компонент. Одна из них, IBMBIO.COM, включает программы

    непосредственного доступа к аппаратным средствам. Другая,

    IBMDOS.COM реализует файловую систему. Упомянутые два прерывания

    используются, когда компонента DOS, относящаяся к файловой системе,

    обращается к другой компоненте - BIO. Хотя эти прерывания и могут

    использоваться программистом, основное их назначение - разделить

    две части DOS. Прерывание 25H осуществляет чтение, а прерывание 26H

    - запись информации с абсолютной адресацией диска. На этом уровне

    обеспечивается доступ к определенным участкам диска, а не записям в

    файле.

 

      Прерывания 20H и 27H обеспечивают механизм возврата управления

    к DOS после выполнения программы. Прерывание 20H соответствует

    нормальному завершению работы программы. Прерывание 27H интересно

    тем, что хотя оно связано с завершением программы, занимаемая

    программой область памяти не возвращается обратно в распоряжение

    DOS. Все содержимое данной области сохраняется неизменным до тех

    пор, пока не будет выключено питание или выполнена переустановка

    системы в начальное состояние. Это удобно в тех случаях, когда

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

    функцию, которая должна сохраниться как часть системного

    программного обеспечения. В гл.10 будет приведен пример

    использования прерывания INT 27H для расширения системы. В DOS

    имеется особенность работы с прерываниями 20H и 27H. Их

 

            Значение

            в AH              Функция

          ----------------------------------------------------------

            0     Завершение программы

            1     Ввод с клавиатуры

            2     Вывод на экран

            3     Дополнительный ввод (асинхронная коммуникация)

            4     дополнительный вывод

            5     Вывод на принтер

            6     Прямой ввод/вывод с консоли

            7     Прямой ввод с консоли без эха

            8     Ввод с консоли без эха

            9     вывод строки

            OAH   Буферизованный ввод с клавиатуры

            0BH   Проверка состояния клавиатуры

            0CH   Очистка буфера клавиатуры и функция # в AL

            0DH   Переустановка диска

            0EH   Выбор диска

            0FH   Открытие файла

            10H   Закрытие файла

            11H   Поиск первого

            12H   Поиск следующего

            13H   Уничтожение файла

            14H   Последовательное чтение

            15H   Последовательная запись

            16H   Создание файйла

            17H   Переименование файла

            19H   Текущий диск

            1AH   Установка адреса обмена с диском

            1BH   Адрес таблицы размещения

            21H   Прямое чтение

            22H   Прямая запись

            23H   Размер файла

            24H   Установка записи для прямого обращения

            25H   Установка вектора прерывания

            26H   Создание нового програмного сегмента

            27H   Прямое чтение блока

            28H   Прямая запись блока

            29H   Анализ имени файла

            2AH   Чтение даты

            2BH   Установка даты

            2CH   Получение времени

            2DH   Установка времени

          -------------------------------------------------------

 

               Фиг. 5.4 Функции прерывания DOS 21H

    использование предпочтительней в файле типа .COM, так как файл типа

    .EXE имеет существенно другой формат и использование в нем этих

    функций DOS немного сложнее. В следующем разделе будут рассмотрены

    различия между файлами типа .COM и типа .EXE и то, почему

    упомянутые прерывания, связанные с завершением работы программы,

    выполняются в них по-разному.

 

      Прерывание 21H является прерыванием, через которое происходи

    обращение к основным функциям DOS. Это прерывание обеспечивает

    доступ к системе ввода-вывода, управляемой DOS. На Фиг.5.4

    представлены все возможные функции, использующие это прерывание.

    Выбор функции в программе осуществляется с помощью записи в регистр

    AH нужного значения перед выполнением прерывания 21H.

      Параметры этих функций приводятся в приложении D руководства по

    DOS. Вместо подробного ознакомления мы разберем пример, в котором

    использованы некоторые из них. В частности, этот пример включает

    функции DOS, связанные с диском.