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

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

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

Для связи с любыми процедурами прерываний, а следовательно, и с процедурами, написанными программистом, используются векторы прерываний – четырехбайтные абсолютные адреса точек входа в эти процедуры. Векторы прерываний располагаются в младших адресах оперативной памяти, начиная с нулевого адреса: прерывание номер 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
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.