|
Интерпретатор командных строк обеспечивает
средства, необходимые
для того, чтобы программа, написанная на
языке ассемблера, начала
выполняться.Кроме того, 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, связанные с диском.
|