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