Assembler для начинающих


Функции DOS



Функции 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, связанные с диском.




Содержание раздела