| Справочник программиста на персональном компьютере фирмы IBM | 38 |
указанный адрес. Адреса имеют размер два слова. Старшее слово
содержит значение сегмента (CS), младшее содержит смещение (IP).
Чтобы установить вектор, указывающим на одну из Ваших процедур,
нужно поместить сегмент процедуры в DS, а смещение в DX (следуя
порядку нижеприведенного примера). Затем поместите номер прерыва-
ния в AL и вызовите функцию. Любая процедура прерывания должна
завершаться не обычной инструкцией RET, а IRET. (IRET выталкивает
из стека три слова, включая регистр флагов, в то время как RET
помещает на стек только два. Если Вы попытаетесь тестировать
такую процедуру как обычную процедуру, но кончающуюся IRET, то Вы
исчерпаете стек.) Отметим, что функция 25H автоматически запре-
щает аппаратные прерывания в процессе изменения вектора, поэтому
не существует опасности, что посреди дороги произойдет аппаратное
прерывание, использующее данный вектор.
;-установка прерывания
PUSH DS ;сохраняем DS
MOV DX,OFFSET ROUT ;смещение для процедуры в DX
MOV AX,SEG ROUT ;сегмент процедуры
MOV DS,AX ;помещаем в DS
MOV AH,25H ;функция установки вектора
MOV AL,60H ;номер вектора
INT 21H ;меняем прерывание
POP DS ;восстанавливаем DS
;-процедура прерывания
ROUT PROC FAR
PUSH AX ;сохраняем все изменяемые регистры
.
Предыдущая страница 38 Следующая страница
740334704
|