Иллюстрированный самоучитель по Турбо Паскалю
Обращения к функциям операционной системы
Турбо Паскаль предоставляет программисту практически неограниченные
возможности использования любых функций стандартной операционной системы 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.