"Роберт Джордайн. Справочное пособие программиста - 2 (ассемблер, операционная система MS DOS)" - читать интересную книгу автора Ctrl-Alt-Del окажется бесполезным. Отметим, что эта добавка не
нужна для тех векторов прерываний, которые являются расширениями существующих прерываний, таким как прерывание 1CH, которое добав- ляет код к прерыванию времени суток [2.1.7]. Когда программа завершается, должны быть восстановлены ориги- нальные вектора прерываний. В противном случае последующая прог- рамма может вызвать данное прерывание и передать управление на то место в памяти, в котором Вашей процедуры уже нет. Функция 35 прерывания 21H возвращает текущее значение вектора прерывания, помещая значение сегмента в ES, а смещение в BX. Перед установкой своего прерывания получите текущее значение вектора, используя эту функцию, сохраните эти значения, и затем восстановите их с помощью функции 25H (как выше) перед завершением своей программы. Например: ;---в сегменте данных: KEEP_CS DW 0 ;хранит сегмент заменяемого прерывания KEEP_IP DW 0 ;хранит смещение прерывания ;---в начале программы MOV AH,25H ;функция получения вектора MOV AL,1CH ;номер вектора INT 21H ;теперь сегмент в ES, смещение в BX MOV KEEP_IP,BX ;запоминаем смещение MOV KEEP_CS,ES ;запоминаем сегмент ; ---в конце программы CLI PUSH DS ;DS будет разрушен MOV DX,KEEP_IP ;подготовка к восстановлению MOV AX,KEEP_CS MOV DS,AX ;подготовка к восстановлению MOV AH,25H ;функция установки вектора MOV AL,1CH ;номер вектора INT 21H ;восстанавливаем вектор POP DS ;восстанавливаем DS STI Имеется пара ловушек, которых следует избегать при написании прерывания. Если новая процедура прерывания должна иметь доступ к данным, то необходимо позаботиться, чтобы DS был правильно уста- новлен (обычно прерывание может использовать стек вызывающей программы). Другая неприятность может заключаться в том, что при завершении программы по Ctrl-Break вектор прерывания не будет восстановлен, если только Вы не предусмотрите, чтобы программа реакции на Ctrl-Break выполняла эту процедуру [3.2.8]. Низкий уровень. Описанные выше функции MS DOS просто получают или изменяют |
|
|