Использование прерываний в Паскале

Для обеспечения интерфейса с программами операционной системы используется модуль DOS. Для выполнения любого программного прерывания служит процедура

 

Intr (IntNo : byte; var reg : registers),

где IntNo – номер прерывания;

reg – переменная типа registers содержит значения регистров до и после входа в процедуру обработки заданного прерывания. Запись Registers представляет собой набор регистров процессора (поля записи).

Специальной разновидностью Intr является процедура MsDos(reg:registers), которая реализует доступ к функциям Dos-прерывания с номером 21h.

Таким образом, вызовы процедур MsDos(reg) и Intr($21, reg) при одинаковой установке значений переменной reg приводят к аналогичным результатам.

Основная последовательность действий при использовании этих функций:

1. поместить № функции в регистр ah;

2. поместить передаваемые функции параметры в определённые регистры;

3. вызвать прерывание командами intr (msdos);

4. извлечь результаты работы функции из определённых регистров.

Пример. Установить курсор в позицию (х,у) и вывести строку на экран, используя прерывания.

Uses crt,dos;

Const St:string='Hello$';

Var Reg:registers;

Begin

{установка курсора, используя 2-ую функцию Bios-прерывания $10}

With reg do

Begin

Ah:=2; {функция установки курсора}

Bx:=0; {номер видеостраницы}

Dl:=40; {номер столбца}

Dh:=12; {номер строки}

End;

Intr($10,reg); {установка курсора в позицию (12,40)}

{вывод строки, используя 9ую функцию Dos-прерывания $21}

With reg do

Begin

Ah:=9; {номер функции вывода строки на экран}

DS:=Dseg; {адрес текущего сегмента данных}

Dx:=ofs(st[1]); {смещение строки в сегменте данных}

End;

Msdos(reg);{вывод строки в текущую позицию экрана}

End.