На главную Назад
Добро пожаловать, уважаемый посетитель!

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

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

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


 

Mail.ru