MS-DOS для программиста© Александр Фролов, Григорий ФроловТом 18, М.: Диалог-МИФИ, 1995, 254 стр. 1.5. Обзор прерываний MS-DOSОперационная система MS-DOS предоставляет программе набор системных вызовов, реализованных с использованием механизма программных прерываний. Эти вызовы открывают прикладной программе доступ к системной информации, к системе консольного ввода/вывода, файловой системе, к системе управления программами и памятью, позволяют организовать обращение к драйверам периферийных устройств компьютера и т. д. Все основные функции MS-DOS вызываются с помощью прерывания INT 21h, однако 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. Кратко перечислим некоторые другие функции, предназначенные для получения системной информации.
Символьный ввод и выводЭти функции применяются для работы со всеми символьными устройствами, такими как консоль, принтер, последовательный порт. Они называются функциями стандартного ввода/вывода. Ввод и вывод программы, использующей стандартные функции, может быть переназначен, например, в текстовый файл. Приведем обзор основных функций стандартного символьного ввода/вывод в виде таблицы.
Из таблицы видно, что для ввода с клавиатуры можно использовать несколько функций. Ввод без эхо-вывода удобен для такой информации, как пароли. Если логика работы программы не допускает прерывания со стороны пользователя, нужно использовать функции, которые не проверяют комбинации клавиш <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. Эта функция предназначена для обмена управляющей информацией между драйвером и программой. Другие функцииСуществуют функции, позволяющие переопределять прерывания, работать с системными часами и календарем, функции для работы в сети и некоторые другие. Эти функции будут описаны позже в соответствующих разделах книги. |