Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых

MS-DOS для программиста

© Александр Фролов, Григорий Фролов
Том 18, М.: Диалог-МИФИ, 1995, 254 стр.

[Назад] [Содеожание] [Дальше]

1.5. Обзор прерываний MS-DOS

Операционная система MS-DOS предоставляет программе набор системных вызовов, реализованных с использованием механизма программных прерываний. Эти вызовы открывают прикладной программе доступ к системной информации, к системе консольного ввода/вывода, файловой системе, к системе управления программами и памятью, позволяют организовать обращение к драйверам периферийных устройств компьютера и т. д.

Все основные функции MS-DOS вызываются с помощью прерывания INT 21h, однако MS-DOS использует и другие прерывания:

Прерывание Описание
INT 20h Завершение работы программы
INT 25h Чтение диска с абсолютной адресацией секторов
INT 26h Запись на диск с абсолютной адресацией секторов
INT 27h Завершение работы программы с оставлением ее резидентной в памяти
INT 28h Прерывание зарезервировано для MS-DOS, используется резидентными программами
INT 2Eh Выполнение команды MS-DOS
INT 2Fh Мультиплексное прерывание, используется для программы печати print и других резидентных программ; открывает доступ к внутренним функциям и структурам MS-DOS

Функции прерывания INT 21h можно разделить на следующие группы:

  • получение системной информации;
  • символьный ввод/вывод;
  • работа с файловой системой;
  • управление программами;
  • управление памятью;
  • связь с драйверами устройств;
  • прочий системный сервис.

В данном обзоре мы кратко рассмотрим эти группы, делая акцент в основном на составе функций. Более подробная информация об использовании функций прерывания MS-DOS INT 21h (и других прерываний MS-DOS) будет приводиться в соответствующих разделах книги.

Номер функции задается при вызове прерывания INT 21h в регистре AH.

Получение системной информации

Функция 30h возвращает в регистре AX номер версии MS-DOS. Например, для версии MS-DOS 5.00 содержимое регистра AH равно 00h, регистра AL - 05h, для версии 6.2, соответственно, 14h и 06h.

Дополнительно через регистр BH функция возвращает программе ОЕМ-код фирмы-производителя операционной системы (IBM - 00, DEC - 16h, 0FFh - Microsoft и т. п.). В регистрах BL:CX после вызова функции должен находится серийный номер дистрибутива операционной системы, однако в существующих версиях MS-DOS серийный номер всегда равен нулю.

Эта информация может применяться для анализа возможности использования таких средств операционной системы, которые поддерживаются не всеми версиями MS-DOS.

Функции 2Ah и 2Ch позволяют программе узнать системную дату и время.

Есть функции, возвращающие текущий диск и текущий каталог. Номера этих функций - 19h и 47h.

Функция 2Fh позволяет программе узнать адрес текущей области DTA (Disk Transfer Area). Эта область используется, например, при поиске файлов в каталоге.

Важная информация находится в блоке PSP (Program Segment Prefix). Этот блок располагается в памяти непосредственно перед выполняющейся программой. В нем находятся, в частности, параметры, передаваемые программе при запуске. Функция 62h возвращает адрес текущего блока PSP.

Кратко перечислим некоторые другие функции, предназначенные для получения системной информации.

Номер функции Описание
35h Позволяет получить значение вектора прерывания с заданным номером
4Dh С помощью этой функции можно узнать код завершения программы
59h Предназначена для получения расширенного кода ошибки
54h Позволяет определить, используется ли проверка при записи на диск
33h Позволяет узнать, может ли пользователь прервать работу программы при помощи комбинации клавиш <Ctrl+Break>

Символьный ввод и вывод

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

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

Приведем обзор основных функций стандартного символьного ввода/вывод в виде таблицы.

Код Назначение Описание
01h Ввод с клавиатуры Выполняется ввод символа с устройства стандартного ввода, а также эхо-вывод символа на стандартное устройство вывода. Пользователь может прервать работу программы при помощи комбинации клавиш <Ctrl+C> и <Ctrl+Break>
06h Ввод с клавиатуры без ожидания Ввод символа с устройства стандартного ввода без ожидания, а также вывод его на устройство стандартного вывода.Комбинации клавиш <Ctrl+C> и <Ctrl+Break> не проверяются
07h Прямой ввод с клавиатуры Ввод символа с клавиатуры.Комбинации клавиш <Ctrl+C> и <Ctrl+Break> не проверяются
08h Ввод с клавиатуры Аналогично функции 07h, но проверяются комбинации клавиш <Ctrl+C> и <Ctrl+Break>
02h Отобразить символ Отображаемый символ посылается на стандартное устройство вывода
09h Отобразить строку На стандартное устройство вывода символов посылается строка, в конце которой находится символ "$"
03h Ввод из последовательного порта Вводится символ из последовательного порта
04h Вывод в последовательный порт Выводится символ на последовательный порт
05h Вывод на принтер Выводится символ на принтер

Из таблицы видно, что для ввода с клавиатуры можно использовать несколько функций. Ввод без эхо-вывода удобен для такой информации, как пароли. Если логика работы программы не допускает прерывания со стороны пользователя, нужно использовать функции, которые не проверяют комбинации клавиш <Ctrl+C> и <Ctrl+Break>.

Для вывода строки символов можно использовать функцию 09h, но отображаемая строка не может содержать символ "$", так как этот символ используется в качестве признака конца строки.

Работа с файловой системой

MS-DOS предоставляет программам обширный сервис для работы с файлами и дисками. Практически все файловые операции можно выполнять с помощью специально предназначенных для этого функций. Только в некоторых случаях (например, защита данных от копирования) приходится использовать прямое обращение к функциям BIOS или портам контроллера диска.

С помощью файловых функций MS-DOS можно создавать и удалять файлы и каталоги, открывать и закрывать файлы, создавать временные файлы. И ввод, и вывод может быть буферизован. Программа может получить как последовательный доступ к содержимому файла, так и произвольный.

Управление программами

MS-DOS предоставляет программам возможность организовать запуск других программ или загрузку и выполнение программных оверлеев. Для этого служит функция 4Bh.

Для завершения работы программа должна также использовать одну из специальных функций MS-DOS. Функция 4Ch, завершая работу программы, позволяет передать операционной системе некоторое число, называемое кодом завершения программы. Это число может быть затем проанализировано в пакетном файле командой IF ERRORLEVEL. Если одна программа запускает другую, то первая может получить код завершения второй с помощью функции 4Dh.

Для того чтобы завершающаяся программа осталась в оперативной памяти (т. е. стала резидентной), она должна вызвать прерывание INT 27h или воспользоваться функцией 31h.

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

Управление памятью

MS-DOS управляет распределением памяти с помощью блоков управления памятью MCB (Memory Control Block). Вся память разбивается на фрагменты различного размера, которым предшествует блок MCB, содержащий характеристики данного фрагмента (например, такие, как его размер).

Программа может динамически получать и освобождать области памяти с помощью функций 48h и 49h, соответственно. Кроме того, можно изменять размер фрагмента памяти, выделенного операционной системой программе. Это делает функция 4Ah.

Драйвер himem.sys предоставляет программе доступ к расширенной памяти, расположенной в адресном пространстве выше границы первого мегабайта. Так как в реальном или виртуальном режиме процессор не может непосредственно адресовать блоки расширенной памяти, для выполнения такой адресации необходимо пользоваться программным интерфейсом драйвера himem.sys.

Связь с драйверами устройств

Мы уже обращали ваше внимание на то, что программы не могут обращаться непосредственно к драйверам периферийных устройств. Все обращения к драйверам имеют либо неявный характер (ввод/вывод с помощью функций прерывания INT 21h), либо используют специальную функцию MS-DOS с кодом 44h. Эта функция предназначена для обмена управляющей информацией между драйвером и программой.

Другие функции

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

[Назад] [Содеожание] [Дальше]