Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lektsia_16_Standartnye_podprogrammy_DOS_System.doc
Скачиваний:
3
Добавлен:
03.12.2018
Размер:
141.82 Кб
Скачать

Лекция: Стандартные процедуры и функции модулей CTR, SYSTEM, DOS Страница 7 из 7

Оглавление

Оглавление 1

Обеспечение интерфейса с командами операционной системы 1

Типы прерываний и их обслуживание 1

Организация работы с каталогами и файлами 2

Установка даты и времени 2

Управление вычислительным процессом с помощью вызова внешних программ 2

Организация работы в текстовом режиме 3

Установка текстового режима 3

Организация окон и вывод на экран 3

Управление клавиатурой и звуком 4

Форматы меню. Алгоритм построения вертикального меню 5

Контрольные вопросы 7

Комбинированный урок №16

Тема: Стандартные процедуры и функции модулей CRT, System и DOS. Обработка прерываний.

Цель: изучить приемы составления программ с использованием процедур и функций модулей на примерах.

Обеспечение интерфейса с командами операционной системы

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

Типы прерываний и их обслуживание

Иногда возникает необходимость прямого обращения к функциям базовой системы ввода-вывода (BIOS) и операционной системы MS–DOS. Для этого можно создать в программе прерывание или выполнить вызов функции MSDOS.

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

Каждому прерыванию соответствует число от 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.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]