
- •Оглавление
- •Комбинированный урок №16
- •Обеспечение интерфейса с командами операционной системы
- •Типы прерываний и их обслуживание
- •Организация работы с каталогами и файлами
- •Установка даты и времени
- •Управление вычислительным процессом с помощью вызова внешних программ
- •Организация работы в текстовом режиме Установка текстового режима
- •Организация окон и вывод на экран
- •Управление клавиатурой и звуком
- •Форматы меню. Алгоритм построения вертикального меню
- •Контрольные вопросы
Лекция:
Стандартные процедуры и функции модулей
CTR, SYSTEM, DOS Страница
Оглавление
Оглавление 1
Обеспечение интерфейса с командами операционной системы 1
Типы прерываний и их обслуживание 1
Организация работы с каталогами и файлами 2
Установка даты и времени 2
Управление вычислительным процессом с помощью вызова внешних программ 2
Организация работы в текстовом режиме 3
Установка текстового режима 3
Организация окон и вывод на экран 3
Управление клавиатурой и звуком 4
Форматы меню. Алгоритм построения вертикального меню 5
Контрольные вопросы 7
Комбинированный урок №16
Тема: Стандартные процедуры и функции модулей CRT, System и DOS. Обработка прерываний.
Цель: изучить приемы составления программ с использованием процедур и функций модулей на примерах.
Обеспечение интерфейса с командами операционной системы
Обработку прерываний, проверку статуса дисков, управление программной средой, организацию работы с каталогами и их элементами реализуют процедуры и функции стандартного модуля DOS. Чтобы их использовать, необходимо подключить этот модуль в начале программы с помощью Uses DOS.
Типы прерываний и их обслуживание
Иногда возникает необходимость прямого обращения к функциям базовой системы ввода-вывода (BIOS) и операционной системы MS–DOS. Для этого можно создать в программе прерывание или выполнить вызов функции MS–DOS.
Прерывание – это некоторый сигнал, который обязывает процессор прервать выполнение текущей программы и переключиться на выполнение другой программы.
Каждому прерыванию соответствует число от 0 до 255. Прерывания могут вызывать:
– устройства компьютера, отличные от процессора;
– команды программных прерываний (например, ниже будет рассмотрена процедура Intr);
– сам процессор при появлении сбоев, особенных ситуаций (например, деление на 0). Например, 9(9) – обработка сигнала нажатия на клавишу; 5(5) – прерывание от принтера при печати копии экрана.
Реагируя на прерывание, процессор должен запомнить адрес возвращения в прерванную программу.
Процессор ПЭВМ имеет четыре шестнадцатиразрядных регистра общего назначения: АХ, ВХ, СХ и DX.
Для обращения к процедурам, реализующим программные прерывания, в модуле DOS описан тип Registers:
Type Registers=Record
Case integer of
0:(AX,BX,CX,DX,BP,SI,DI,DS,ES,Flags: word);
1:(AL,AH,BL,BH,CL,CH,DL,DH:byte)
End;
Запись Registers представляет собой набор регистров процессора (поля записи).
Процедура Intr (IntNo: byte; Var Regs: Registers); выполняет заданное программное прерывание. Параметр IntNo – это номер программного прерывания (0…255). Когда выполняется процедура Intr, значения полей AX, BX, CX, DX, BP, SI, DI, DS и ES загружаются в соответствующие регистры процессора. После этого вызывается прерывание с номером IntNo. После того, как прерывание обработано, содержимое регистров процессора загружается в поле Regs, а содержимое регистра флагов копируется в поле Flags. Таким образом, можно получить доступ к результатам работы процедуры прерывания.
Процедура MsDos (Var Regs: Registers); выполняет вызов функции MS–DOS, номер которой содержится в регистре AH. Результат вызова MsDos будет тот же самый, что и результат вызова Intr с номером прерывания IntNo=#21. Вообще, прерывание номер $21 называют прерыванием DOS, объединяющим в себе большое количество различных функций.
Пример 1. Перевод курсора в невидимое состояние, установка стандартного размера курсора.
Uses Dos;
Var i:byte;
Procedure SetCursorSize(Size:word);
Var Regs:Registers;
Begin
With Regs do
begin
AH:=$01;
CH:=Hi(Size);
CL:=Lo(Size);
Intr($10,Regs) {прерывание $10, где на входе в регистр CH посылается номер}
{ начальной строки, а в регистре CL – номер последней строки курсора.}
end
End;
Begin {основная программа}
Writeln('Перевод курсора в невидимое состояние - ...'); SetCursorSize($2000);
For i:=1 to 10 do writeln(i);
Readln;
Writeln('Установка стандартного размера курсора - ...'); SetCursorSize($0607);
writeln;
For i:=1 to 10 do writeln(i);
Readln
End.