|
Обращения к функциям операционной системы
Турбо Паскаль предоставляет
программисту практически неограниченные возможности
использования любых функций стандартной операционной
системы MS-DOS. При внимательном анализе материала этой
книги Вы, очевидно, заметите, что значительную его часть
составляет описание многочисленных библиотечных процедур
и функций. Собственно язык Паскаль весьма прост и лаконичен,
что, по мнению многих специалистов, и послужило одной
из причин его широкого распространения. Библиотечные
же процедуры и функции, в своей значительной части,
являются, по существу, своеобразным интерфейсом между
языковыми средствами Турбо Паскаля и функциями операционной
системы. Разумеется, можно только приветствовать усилия
разработчиков Турбо Паскаля по созданию мощных библиотек
TURBO.TPL и GRAPH.TPU, однако ясно, что таким способом
невозможно запрограммировать все допустимые обращения
к средствам ДОС. Вот почему в Турбо Паскаль включены
две процедуры, с помощью которых
программист может сам сформировать вызов той или иной
функции дисковой операционной системы (ДОС).
Следует учесть, что единственным механизмом
обращения к функциям ДОС является инициация программного
прерывания. Прерывание - это особое состояние вычислительного
процесса. В момент прерывания нарушается нормальный
порядок выполнения команд программы и управление передается
специальной процедуре, которая входит в состав ДОС и
называется процедурой обработки прерывания. Каждое прерывание
характеризуется в рамках ДОС порядковым номером и связано
со своей процедурой обработки. В архитектуре центрального
процессора ПК предусмотрены прерывания двух типов -
аппаратные и программные. Аппаратные прерывания создаются
схемами контроля и управления ПК и сигнализируют операционной
системе о переходе какого-либо устройства в новое состояние
или о возникновении неисправности. Программные прерывания
инициируются при выполнении одной из двух специальных
команд микропроцессора (INT или INTO) и служат для обращения
к средствам ДОС.
Описываемые ниже процедуры входят в
состав библиотечного модуля DOS.TPU и становятся доступными
после объявления USES DOS. При возникновении программного
прерывания в большинстве случаев необходимо передать
процедуре обработки прерывания некоторые параметры,
в которых конкретизируется запрос нужной функции. Эти
параметры, а также выходная информация (результат обработки
прерывания) передаются от программы к процедуре и обратно
через регистры центрального процессора. В составе модуля
DOS.TPU для этих целей определен специальный тип:
type
Registers = record case integer of
0 : (AX, BX, CX, BP, SI, DI, DS, ES,
Flags : word);
1 : (AL, AH, BL, BH, CL, CH, DL, DH
: byte)
end ;
Этот тип имитирует регистры центрального
процессора и дает возможность обращаться к ним как к
16-битным или 8-битным регистрам.
Процедура INTR. С помощью этой процедуры
инициируется программное прерывание с требуемым номером.
Обращение:
INTR (<N>,<регистры>)
Здесь <N> - выражение типа BYTE;
номер прерывания;
<регистры> - переменная типа REGISTERS;
в этой переменной процедуре обработки прерывания передается
содержимое регистров и в ней же возвращается выходная
информация.
Например, прерывание с номером 18 ($12)
возвращает в регистре АХ объем оперативной памяти ПК.
Короткая программа, представленная в примере 11.1, выведет
на экран сообщение об этом объеме.
Пример 11.1.
Uses DOS;
var
r : registers;
begin
Intr ($12, r);
writeln ('Объем памяти = ',r.AX, '
Кбайт')
end.
Процедура MSDOS. Инициирует прерывание
с номером 33 ($21). Формат обращения:
MSDOS (<регистры>)
Программное прерывание с номером 33
($21) стоит особняком, так как оно дает доступ к большому
количеству функций ДОС (этим прерыванием вызывается
85 функций). Рассматриваемая процедура полностью эквивалентна
вызову процедуры INTR с номером прерывания 33. Например,
следующая программа (пример 11.2) выведет на экран версию
операционной системы:
Пример 11.2
Uses DOS;
var
r : registers;
begin
r.АН := $30;
MsDos(r);
WriteLn('Версия операционной системы:
', r.AL, '.' r.АН)
end.
|