Какие процедуры есть в паскале для прямого обращения к функциям ms dos и bios

Обновлено: 30.06.2024

Возвращает количество свободных байтов указанного диска. Замечания :
Переменная Drive – это диск для проверки, где A = 1, B = 2 и т.д. Если Drive = 0 , то используется текущий диск.

Функция DiskFree может оказаться полезной для определения наличия свободного места на диске.

Пример: См. также: DiskSize

Функция DiskSize

Возвращает общий размер свободного места на диске, в байтах. Переменная Drive – это диск для проверки, где A = 1, B = 2 и т.д. Если Drive = 0 , то используется текущий диск.

Пример : См. также: DiskFree

Функция DosExitCode

Функция DosVersion

Функция EnvCount

Возвращает количество строк, содержащихся в системном окружении. См. также:
EnvStr
GetEnv

Функция EnvStr

Возвращает указанную строку окружения. Замечания :
Переменная Index – это номер переменной окружения, например, первая переменная – это 1, вторая – 2 и т.д. Неправильный индекс возвращает пустую строку.

Функция EnvStr возвращает строку в форме (VarName=String). Если порядок переменных системного окружения неизвестен, то используют функцию GetEnvto для поиска переменной по имени.

Процедура Exec

Выполняет указанную программу с указанной командной строкой. Замечания :
Переменная Path – это диск, директория и имя программы для выполнения. Переменная CmdLine содержит аргументы командной строки.

Процедура Exec передает управление программе, указанной в переменной Path . При этом распределение памяти не изменяется. После завершения процедуры Exec используйте функцию DosExitCode для определения кода выхода из программы. Процедура Exec также устанавливает значение переменной DosError , если случается ошибка.

Процедура Exec не выполняет программы, которые требуют Блок Управления Файлом - File Control Blocks (FCB) .

Функция FExpand

Процедура FindFirst

Ищет указанный каталог8 для соответствующего файла. Замечания :
Переменная Path – это диск и каталог, в котором будет выполняться поиск и имя файла для поиска. Шаблоны следующие, например, 'MYFILE. *' .

Переменная Attr содержит атрибуты файла для включения в поиск в добавление ко всем нормальным файлам.

Процедура FindFirst используется совмествно с процедурой FindNext . Используйте FindNext для размещения каких-либо дополнительных файлов, соответствующих критериям поиска. Все ошибки записываются в переменную DosError , которая определена в модуле DOS.

Процедура FindNext

Находит следующее вхождение, которое соответствует имени и атрибутам, указанным в предварительно вызванной процедуре FindFirst . Замечания :
Процедура FindNext используется совместно с процедурой FindFirst . Используйте FindNext для размещения каких-либо дополнительных файлов, соответствующих критериям поиска, предварительно определенных для процедуры FindFirst . Переменная F должна быть той же самой переменной, которая была использована для ввода в FindFirst . Все ошибки записываются в переменную DosError , которая определена в модуле DOS.

Пример: См. также: FSearch

Функция FSearch

Поиск файла. Замечания :
Переменная Path имеет тип PathStr , который определен в модуле DOS. Переменная DirList – это список директорий, разделенных точкой с запятой (;), которые будут включены в поиск.

Функция FSearch возвращает каталог и имя файла, если файл существует. Если файл, указанный в переменной Path , не найден в списке директорий, то возвращается пустая строка. Функция FSearch всегда начинает поиск с текущей директории, а затем проверяет директории, перечисленные в переменной DirList в том порядке, в котором они перечислены.

Процедура FSplit

Разделяет имя файла на три компонента. Замечания :
Используйте эту процедуру для разделения полного имени файла на три компонента: путь, имя файла и расширение файла. Переменная Path имеет тип PathStr , который определен в модуле DOS. Переменная Dir возвращает путь или часть переменной Path , которая содержит каталог (или каталоги). Переменная Name возвращает фактическое имя файла без расширения. Переменная Ext возвращает расширение файла, которому предшествует точка (.).

Возможно, что один или более компонентов вернутся пустыми. Это может случиться, если переменная Path не содержит этих компонентов. Например, в том случае, если в переменной Path указан пустой каталог.

Процедура GetCBreak

Возвращает состояние проверки Ctrl-Break в DOS. Замечания :
Возвращает TRUE, если Ctrl-Break включена, иначе возвращает FALSE.

С включенной проверкой Ctrl-Break c все вызовы ввода/вывода (консоль, принтер и коммуникации) являются проверяемыми. Чтобы выключить Ctrl-Break , используйте процедуру SetCBreak .

Процедура GetDate

Возвращает текущую дату, установленную в операционной системе.

Функция GetEnv

Возвращает значение указанной переменной окружения. Замечания :
VarName – имя переменной для поиска. Если VarName не существует как переменная окружения, то возвращается пустая строка.

Функция GetEnv возвращает строку, назначенную для переменой окружения.

Процедура GetFAttr

Возвращает атрибуты файла. Замечания :
F – это файловая переменная, а также типизированный, нетипизированный или текстовый файл, который не открыт. Переменная Attr содержит атрибуты файла.

Файл, связываемый с переменной F , должен быть закрыт. Переменная Attr должна сравниваться с одной из констант атрибутов, которые определены в модуле DOS, с помощью ЛОГИЧЕСКОГО И (AND).

Ошибки записываются в переменную DosError , которая определена в модуле DOS. Для большей информации о файловых атрибутах обращайтесь к справочному руководству по вашей DOS.

Пример: См. также: SetFAttr

Процедура GetFTime

Возвращает дату и время последнего изменения файла. Замечания :
Файл, связанный с переменной F должен быть открыт. Время может быть распаковано с помощью процедуры UnPackTime . Ошибки записываются в переменную DosError , которая определена в модуле DOS.

Пример: См. также: SetFTime

Процедура GetIntVec

Возвращает адрес, записанный в указанном векторе прерывания. Замечания :
Учтите, что процедура GetIntVec возвращает адрес прерывания защищенного режима. Чтобы получить вектор прерывания реального режима, используйте процедуру GetRealIntVec . Прерывания могут происходить в защищенном или реальном режиме.

Процедура GetTime

Возвращает текущее время, установленное в операционной системе. Замечания :
Диапазоны возвращаемых значений следующие: Hour (Час) [0..23], Minute (Минута) [0..59], Second (Секунда) [0..59] и Sec100 (сотая доля секунды) [0..99] .

Пример: См. также: SetTime

Процедура GetVerify

Возвращает состояние проверочного флага в DOS. Замечания :
State = TRUE, если проверочный флаг DOS включен, иначе FALSE.

С включенным проверочным флагом DOS все выводимые на диск данные проверяются на целостность. Иначе выводимые данные не проверяются. Чтобы установить состояние проверочного флага DOS, используйте процедуру SetVerify .

Процедура Intr

Выполняет указанное программное прерывание. Замечания :
Перед вызовом процедуры Intr , загрузите переменную Regs соответствующими параметрами, необходимыми для прерывания. Переменная Regs возвращает значения регистров после вызова прерывания. Вызовы, которые используют регистры ESP и SS не могут быть выполнены. Более подробную информацию о программных прерываниях ищите в руководствах на ваши BIOS и DOS.

Учтите, что все сегментные регистры (DS,ES,FS,GS) должны содержать допустимые значения сегментных дескрипторов или быть установлены в ноль перед вызовом процедуры Intr . Все прерывания, вызов которых требует анализа смещения, должны использовать 32-битное смещение.

Процедура Keep

Процедура MsDos

Выполняет вызов функции DOS. Замечания :
Загрузите переменную Regs соответствующими параметрами перед вызовом MS-DOS. Переменная Regs возвращает значения регистров после вызова прерывания. Учтите, что тип TRegisters позволяет доступ к 32-битным регистрам. Вызовы DOS, которые используют регистры ESP и SS не могут быть выполнены. Для прерывания, отличного от $21, используйте процедуру Intr . Более подробную информацию о программных прерываниях DOS ищите в руководствах на вашу DOS.

Учтите, что все сегментные регистры (DS,ES,FS,GS) должны содержать допустимые значения сегментных дескрипторов или быть установлены в ноль для использования MS-DOS.

Процедура PackTime

Преобразует запись DateTime . Замечания :
Процедура PackTime может быть использована совместно с процедурой SetFTime . Для распаковки 4-х байтового пакета дата/время в запись DateTime используйте процедуру UnpackTime .

Процедура SetCBreak

Устанавливает состояние проверки Ctrl-Break . Замечания :
С включенной проверкой Ctrl-Break , проверяются все вызовы операций ввода/вывода (консоль, принтер и коммуникации). Чтобы получить состояние Ctrl-Break , используйте процедуру GetCBreak .

Процедура SetDate

Устанавливает текущую дату в операционной системе. Замечания :
Неправильная дата игнорируется операционной системой. Для получения текущей даты используйте процедуру GetDate .

Процедура SetFAttr

Устанавливает атрибуты файла. Замечания :
Файл, связанный с переменной F должен быть закрыт. Переменная Attr должна быть сформирована с помощью операции ЛОГИЧЕСКОЕ ИЛИ (OR) между этой переменной и одной из констант файловых атрибутов. Эти константы определенны в модуле DOS.

Ошибки записываются в переменную DosError , определенную в модуле DOS. Более подробную информацию о файловых атрибутах ищите в руководствах на вашу DOS.

Пример: См. также: GetFAttr

Процедура SetFTime

Устанавливает дату и время последнего изменения файла. Замечания :
Файл, связанный с переменной F должен быть открыт. Упакованный формат дата/время может быть создан с помощью процедуры PackTime . Ошибки записываются в переменную DosError , определенную в модуле DOS. Более подробную информацию об упакованном формате дата/время ищите в руководствах на вашу DOS.

Процедура SetIntVecs

Устанавливает указанный вектор прерывания для указанного адреса. Замечания :
Прерывания могут происходить в защищенном или реальном режиме.

Пример: См. также:
GetIntVec
FarPointer

Процедура SetTime

Устанавливает текущее время в операционной системе. Замечания :
Неправильное значение игнорируется. Для получения текущего времени операционной системы используйте процедуру GetTime .

Процедура SetVerify

Устанавливает состояние флага проверки в DOS. См. также: GetVerify

Процедура SwapVectors

Процедура SwapVectors ничего не делает и предоставляется только для совместимости с Borland Pascal.

Процедура UnpackTime

Преобразует переменную типа Longint в запись. Замечания :
Процедура UnPackTime может быть использована совместно с процедурами GetTime, FindFirst и FindNext . Эти процедуры возвращают время в 4-х байтном упакованном формате дата/время. Для упаковки записи DateTime используйте процедуру PackTime .

Операционная система управляет программами, периферийными устройствами, словом, всем. Важную роль здесь играют прерывания. Прерывание представляет собой сигнал процессору, вырабатываемый программой, каким-либо устройством или самим процессором. Этот сигнал приостанавливает выполнение программы и запускает соответствующую функцию операционной системы для выполнения необходимых системных действий. Необходимость прерываний вызвана двумя причинами – специальными запросами на выполнение системных действий, например по вводу и выводу данных, а также возникновением ошибок при выполнении программ. Прерываниям присваиваются номера, например $10. Прерывания от $1F включительно зарезервированы для BIOS, а начиная с $20 до $62 - для операций MS-DOS. Прерывания хранятся в специальной таблице прерываний. В таблице 1 приведен перечень некоторых прерываний.

Прерывание Владелец Назначение
$00 BIOS Прерывание из-за ошибки деления на нуль
$04 BIOS Прерывания из-за переполнения при умножении
$05 BIOS Функция печати копии экрана
$06 BIOS Исключительная ситуация «неопределенный код операции»
$07 BIOS Исключительная ситуация «код операции ESC»
$10 BIOS Обслуживание видеокарты
$11 BIOS Список установленного оборудования
$12 BIOS Размер памяти
$13 BIOS Обслуживание дискового ввода- вывода
$14 BIOS Обслуживание последовательного ввода вывода
$16 BIOS Обслуживание ввода- вывода с клавиатуры
$17 BIOS Обслуживание принтера
$19 BIOS Программа начальной загрузки системы
$1A BIOS Обслуживание системного таймера и часов
$1B BIOS Клавиши Control-Break
$1C BIOS Часы таймера пользователя
$21 MS-DOS Вызов функции MS-DOS
$22 MS-DOS Адрес завершения программы
$23 MS-DOS Адрес выхода Control-C
$24 MS-DOS Адрес аварийного завершения из-за фатальной ошибки
$25 MS-DOS Функция чтения по абсолютному адресу на диске
$26 MS-DOS Функция записи по абсолютному адресу на диске
$27 MS-DOS Функция «завершить и оставить резидентной»

В Паскале есть две процедуры для прямого обращения к функциям MS-DOS и BIOS -MSDos и Intr. Прерывания зависят от состояния регистров центрального процессора и заносят в эти регистры результат своей работы. Регистр – это внутреннее запоминающее устройство процессора для временного хранения обрабатываемой или управляющей информации. В модуле System имеется специальный тип Registers, который описывается следующим образом:

сase Integer of

0: (AX, BX, CX, BP, SI, DI, DS, ES, Flags: Word);

1: (AL, AH, BL, BH, CL, CH, DL, DH: Byte);

тип Registers представляет собой запись, состоящую только из вариативной части. В табл. Дан список регистров процессора 80х86.

Регистры общего назначения
Регистры данных (16-битные = 8 + 8 бит)
Регистр Назначение
AX = AH AL Сумматор
BX = BH BL Базовый (индексный) регистр
CX = CH CL Счетный регистр
DX = DH DL Регистр данных
Индексные регистры и регистровые указатели (16 бит)
Регистр Назначение
SP Указатель стека
BP Указатель базы регистра
SI Регистр- индекс источника
DI Регистр- индекс назначения
Сегментные регистры (16 бит)
Регистр Назначение
CS Сегмент кода
DS Сегмент данных
SS Сегмент стека
ES Дополнительный сегмент
Регистр командного указателя (16 бит)
IP
Флаговый регистр

Сегментом называется область памяти размером 64 Кбайт, которая начинается по любому адресу, кратному 16. В области памяти, выделяемой программе, имеется три основных сегмента:

1. Сегмент кода содержит машинные команды, которые будут выполняться. Первая выполняемая команда находится в начале кодового сегмента и операционная система для выполнения программы передает управление по адресу данного сегмента.

2. Сегмент данных содержит данные и рабочие области, необходимые программе.

3. Сегмент стека содержит адреса для возврата в операционную систему и для возврата из программ в главную программу.

Особенность регистров общего назначения заключается в том, что возможна их адресация как в целом (т.е. одним словом), так и каждой однобайтовой части (например, AL- младшая половина, а AH – старшая половина). Регистр AX является сумматором и применяется для всех операций ввода – вывода, некоторых арифметических и строковых операций. Регистр BX может использоваться для расширенной адресации и вычислений. Регистр CX необходим для управления числом повторений циклов и операций сдвига. Регистр DX применяется для некоторых операций ввода- вывода и тех арифметических операций над большими числами, которые используют два регистра DX:AX. Регистровые указатели SP и BP обеспечивают системе доступ к данным в сегменте стека, реже они используются для вычислений. Индексные регистры SI (индекс источника) и DI (индекс назначений) могут применяться для расширенной адресации и операций сложения и вычитания. Регистр командного указателя содержит смещение указателя на команду, которая должна быть выполнена.

Флагом называют признак, установленный программно с целью указания особенностей выполнения стандартных операций,- это одноразрядный индикатор, отражающий выполнение или невыполнение определенного условия.

Процедуры, предназначенные для работы с регистрами процессора и прерывания MSDos и Intr модуля DOS:

Procedure MSDos (var regs: Registers);

Procedure Intr (number : Byte ; var regs: Registers);

Процедура Intr предназначена для обращения к прерыванию с указанным номером (первый параметр). Перед выполнением прерывания процедура загружает регистры процессора значением соответствующих полей записи regs. После выполнения прерывания содержимое этих регистров вновь записывается в соответствующую переменную. Процедура MSDos эквивалентна вызову процедуры Intr для прерывания $21.

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

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

Практическая часть

1. Ввести программу.

2. Запустить на выполнение.

3. Пояснить работу процедур модуля DOS, предназначенных для выполнения системных операций (прерываний), обращения к памяти и портам ввода- вывода.

4. Ответить на контрольные вопросы

5. Оформить отчет

Задача 1 В качестве примера работы с прерываниями рассмотрим пример простой программы, в которой используется функция $2С для считывания показаний системных часов.

Операционная система управляет программами, периферийными устройствами, словом, всем. Важную роль здесь играют прерывания. Прерывание представляет собой сигнал процессору, вырабатываемый программой, каким-либо устройством или самим процессором. Этот сигнал приостанавливает выполнение программы и запускает соответствующую функцию операционной системы для выполнения необходимых системных действий. Необходимость прерываний вызвана двумя причинами – специальными запросами на выполнение системных действий, например по вводу и выводу данных, а также возникновением ошибок при выполнении программ. Прерываниям присваиваются номера, например $10. Прерывания от $1F включительно зарезервированы для BIOS, а начиная с $20 до $62 - для операций MS-DOS. Прерывания хранятся в специальной таблице прерываний. В таблице 1 приведен перечень некоторых прерываний.

Прерывание из-за ошибки деления на нуль

Прерывания из-за переполнения при умножении

Функция печати копии экрана

Исключительная ситуация «неопределенный код операции»

Исключительная ситуация «код операции ESC»

Список установленного оборудования

Обслуживание дискового ввода- вывода

Обслуживание последовательного ввода вывода

Обслуживание ввода- вывода с клавиатуры

Программа начальной загрузки системы

Обслуживание системного таймера и часов

Часы таймера пользователя

Вызов функции MS-DOS

Адрес завершения программы

Адрес выхода Control-C

Адрес аварийного завершения из-за фатальной ошибки

Функция чтения по абсолютному адресу на диске

Функция записи по абсолютному адресу на диске

Функция «завершить и оставить резидентной»

В Паскале есть две процедуры для прямого обращения к функциям MS-DOS и BIOS -MSDos и Intr. Прерывания зависят от состояния регистров центрального процессора и заносят в эти регистры результат своей работы. Регистр – это внутреннее запоминающее устройство процессора для временного хранения обрабатываемой или управляющей информации. В модуле System имеется специальный тип Registers, который описывается следующим образом:

сase Integer of

0: (AX, BX, CX, BP, SI, DI, DS, ES, Flags: Word);

1: (AL, AH, BL, BH, CL, CH, DL, DH: Byte);

тип Registers представляет собой запись, состоящую только из вариативной части. В табл. Дан список регистров процессора 80х86.

Регистры общего назначения

Регистры данных (16-битные = 8 + 8 бит)

Базовый (индексный) регистр

Индексные регистры и регистровые указатели (16 бит)

Указатель базы регистра

Регистр- индекс источника

Регистр- индекс назначения

Сегментные регистры (16 бит)

Регистр командного указателя (16 бит)

Флаговый регистр

Сегментом называется область памяти размером 64 Кбайт, которая начинается по любому адресу, кратному 16. В области памяти, выделяемой программе, имеется три основных сегмента:

Сегмент кода содержит машинные команды, которые будут выполняться. Первая выполняемая команда находится в начале кодового сегмента и операционная система для выполнения программы передает управление по адресу данного сегмента.

Сегмент данных содержит данные и рабочие области, необходимые программе.

Сегмент стека содержит адреса для возврата в операционную систему и для возврата из программ в главную программу.

Особенность регистров общего назначения заключается в том, что возможна их адресация как в целом (т.е. одним словом), так и каждой однобайтовой части (например, AL- младшая половина, а AH – старшая половина). Регистр AX является сумматором и применяется для всех операций ввода – вывода, некоторых арифметических и строковых операций. Регистр BX может использоваться для расширенной адресации и вычислений. Регистр CX необходим для управления числом повторений циклов и операций сдвига. Регистр DX применяется для некоторых операций ввода- вывода и тех арифметических операций над большими числами, которые используют два регистра DX:AX. Регистровые указатели SP и BP обеспечивают системе доступ к данным в сегменте стека, реже они используются для вычислений. Индексные регистры SI (индекс источника) и DI (индекс назначений) могут применяться для расширенной адресации и операций сложения и вычитания. Регистр командного указателя содержит смещение указателя на команду, которая должна быть выполнена.

Флагом называют признак, установленный программно с целью указания особенностей выполнения стандартных операций,- это одноразрядный индикатор, отражающий выполнение или невыполнение определенного условия.

Процедуры, предназначенные для работы с регистрами процессора и прерывания MSDos и Intr модуля DOS:

Procedure MSDos (var regs: Registers);

Procedure Intr (number : Byte ; var regs: Registers);

Процедура Intr предназначена для обращения к прерыванию с указанным номером (первый параметр). Перед выполнением прерывания процедура загружает регистры процессора значением соответствующих полей записи regs. После выполнения прерывания содержимое этих регистров вновь записывается в соответствующую переменную. Процедура MSDos эквивалентна вызову процедуры Intr для прерывания $21.

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

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

Язык:
Русский
English

Процедуры и функции модуля DOS (по назначению)

Это - список функций и процедур модуля DOS по назначению.

Вы можете также искать эти процедуры и функции в списке по имени .

Процедуры даты и времени: Что делает

GetDate (процедура) Возвращает текущую дату, установленную в
операционной системе.
GetFTime (процедура) Возвращает дату и время обновления файла.
GetTime (процедура) Возвращает текущее время в операционной системе.
PackTime (процедура) Преобразовывает запись типа DateTime в LongInt.
SetDate (процедура) Устанавливает текущую дату в операционной системе.
SetFTime (процедура) Устанавливает атрибуты даты и времени файла.
SetTime (процедура) Устанавливает текущее время в операционной системе.
UnpackTime (процедура) Преобразовывает 4-х байтовое, упакованное значение
типа Longint, полученное от GetFTime , FindFirst ,
или FindNext в запись типа DateTime.

Дисковые функции: Что делает

DiskFree (функция) Возвращает число свободных байт на диске.
DiskSize (функция) Возвращает полный размер диска.

Функции обработки файлов: Что делает

FExpand (функция) Расширяет имя файла до полного.
FSearch (функция) Ищет файл.
FSplit (функция) Разбивает имя файла на три его компонента.
FindFirst (процедура) Ищет файл в заданном каталоге.
FindNext (процедура) Ищет следующий файл, соответствующий имени
и атрибутам, найденного ранее файла.
GetFAttr (процедура) Возвращает атрибуты файла.
SetFAttr (процедура) Устанавливает атрибуты файла.

Процедуры поддержки прерываний: Что делает

GetIntVec (процедура) Возвращает адрес, сохраненный в заданном
векторе прерывания.
Intr (процедура) Выполняет определенное программное прерывание.
MsDos (процедура) Выполняет вызов функции DOS.
SetIntVec (процедура) Устанавливает заданный вектор прерывания
на заданный адрес.

Подпрограммы обработки процессов

Exec (процедура) Выполняет заданную программу с заданными
параметрами командной строки.
Keep (процедура) Завершает программу и оставляет ее в памяти.
SwapVectors (процедура) Переключает указатели SaveIntXX в модуле
System на текущие вектора.
DosExitCode (функция) Возвращает код завершения подпроцесса.

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

Машинно-ориентированный язык ассемблера предоставляет квалифицированному программисту богатейшие возможности использования всех особенностей архитектуры ПК. Ассемблерные программы выполняются значительно быстрее и занимают меньший объем памяти, чем программы, написанные на Турбо Паскале, однако низкий уровень языка ассемблера существенно снижает производительность труда программиста и резко усложняет отладку программ. Как правило, на языке ассемблера пишутся сравнительно небольшие фрагменты программ, в которых используются недоступные из Турбо Паскаля особенности архитектуры ПК.

Внешняя процедура (функция) в программе, написанной на Турбо Паскале, объявляется своим заголовком, за которым следует стандартная директива EXTERNAL, например: Как видно из этих примеров, тело внешней процедуры (функции) отсутствует - его заменяет директива EXTERNAL. Для подключения ассемблерной про-граммы необходимо предварительно ее откомпилировать и получить объектный файл с расширением OBJ, содержащий перемещаемый код ассемблерной программы. Непосредственно перед описанием внешней процедуры (функции) в тело основной программы вставляется директива компилятора Диск и каталог, в котором следует искать этот файл, если он не обнаружен в текущем каталоге, указываются опцией OPTIONS/DIRECTORIES/OBJECT DIRECTORIES.

Обращение к функциям операционной системы

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

Прерывание - это особое состояние вычислительного процесса. В момент прерывания нарушается нормальный порядок выполнения команд программы и управление передается специальной процедуре, которая входит в состав ДОС и называется процедурой обработки прерывания. Каждое прерывание характеризуется в рамках ДОС порядковым номером и связано со своей процедурой обработки.

В архитектуре центрального процессора ПК предусмотрены прерывания двух типов - аппаратные и программные. Аппаратные прерывания создаются схемами контроля и управления ПК и сигнализируют операционной системе о переходе какого-либо устройства в новое состояние или о возникновении не-исправности. Программные прерывания инициируются при выполнении одной из двух специальных команд микропроцессора (INT или INTO) и служат для обращения к средствам ДОС.

Процедура INTR. С помощью этой процедуры инициируется программное прерывание с требуемым номером. Обращение: Здесь B- выражение типа BYTE; номер прерывания; - переменная типа REGISTERS; в этой переменной процедуре обработки прерывания передается содержимое регистров и в ней же возвращается выходная информация.

Пример. Процедура MSDOS. Инициирует прерывание с номером 33 ($21). Формат обращения: Программное прерывание с номером 33 ($21) стоит особняком, так как оно дает доступ к большому количеству функций ДОС (этим прерыванием вызывается 85 функций). Рассматриваемая процедура полностью эквивалентна вызову процедуры INTR с номером прерывания 33. Например, следующая программа (пример ниже) выведет на экран версию операционной системы:

Пример. При нормальном завершении программы она выгружается из памяти, что делает невозможным разработку резидентных в памяти процедур обработки прерываний. Вы можете прекратить работу программы и оставить ее резидентной в памяти, если воспользуетесь процедурой KEEP.

Читайте также: