новлен (обычно прерывание может использовать стек вызывающей
программы). Другая неприятность может заключаться в том, что при
завершении программы по Ctrl-Break вектор прерывания не будет
восстановлен, если только Вы не предусмотрите, чтобы программа
реакции на Ctrl-Break выполняла эту процедуру [3.2.8].
Низкий уровень.
Описанные выше функции MS DOS просто получают или изменяют
пару слов в младших ячейках памяти. Смещение вектора может быть
вычислено простым умножением номера вектора на 4. Например, чтобы
получить адрес прерывания 16H в ES:BX:
;-получение адреса прерывания 16H
SUB AX,AX ;устанавливаем ES на начало памяти
MOV ES,AX ;
MOV DI,16H ;номер прерывания в DI
SHL DI,1 ;умножаем на 2
SHL DI,1 ;умножаем на 2
MOV BX,ES:[DI] ;берем младший байт в BX
MOV AX,ES:[DI]+2 ;берем старший байт в ES
MOV ES,AX ;
Не рекомендуется прямо устанавливать вектор прерываний, обходя
функцию DOS. В частности в многозадачной среде операционная сис-
тема может поддерживать несколько таблиц векторов прерываний и
реальный физический адрес таблицы может быть известен только DOS.
1.2.4 Дополнение к существующему прерыванию.
Хотя и не часто, но иногда бывает полезно добавить код к су-
ществующему прерыванию. В качестве примера рассмотрим программы,
которые преобразуют одно нажатие клавиши в длинные определяемые
Предыдущая страница 41 Следующая страница
46661449
|