Иллюстрированный самоучитель по Tirbo Pascal



              

Поддержка процедур обработки прерываний - часть 2


pop ax

irep

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

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

в младших адресах оперативной памяти, начиная с нулевого адреса: прерывание номер 0 - по адресу 0, номер 1 - по адресу 1*4 = 4, номер N - по адресу N * 4. С помощью следующих двух процедур программист может прочитать содержимое любого вектора или установить его новое значение.

Процедура GETINTVEC.

Возвращает вектор прерывания с указанным номером. Обращение:

GETINTVEC (<,<вектор>)

Здесь <D> - выражение типа BYTE; номер прерывания;

<вектор> - переменная типа POINTER; адрес точки входа в процедуру обработки прерывания.

Представленная в примере 11.3 программа выводит на экран содержимое всех ненулевых векторов прерываний.

Пример 11.3

Uses DOS; 

var

i : byte; p : pointer; 

begin

for i := 0 to 255 do 

begin

GetlntVec (i, p) ;

if (Seg (р) <> 0) or (Ofs (рл) <> 0) then 

WriteLn (' N=', i:3, ' Seg=', Seg (р):5,

' Ofs =' , Ofs (р) :5) 

end 

end.

Процедура SETINTVEC.

Устанавливает ндвое значение вектора прерывания. Формат обращения:

SETINTVEC (<,<адрес>)

Здесь <D> - выражение типа BYTE; номер прерывания;

<адрес> - выражение типа POINTER; адрес точки входа в процедуру обработки прерывания.

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

Процедура KEEP.

Завершает работу программы и оставляет ее резидентной в памяти. Обращение:

KEEP (<код>)

Здесь <код> - выражение типа WORD - код завершения программы. Код завершения представляет собой фактически единственный механизм передачи сообщений от запущенной программы к программе, которая ее запустила. Он может быть проанализирован в вызывающей программе с помощью функции DOSEXITCODE.

Функция DOSEXITCODE.

Возвращает значение типа WORD - код завершения подчиненной программы. Обращение:

DOSEXITCODE




Содержание  Назад  Вперед