Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
10. Программирование на ассемблере ПЭВМ.Обработ...doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
568.32 Кб
Скачать

6Примеры резидентных обработчиков прерываний на ассемблере

Пример 1. Резидентный обработчик прерывания int 1СН. Через каждые 10 обращений к таймеру выводит напрямую в видеопамять символ ASCII. Резидент загружается из COM-файла.

code segment byte public

org 100h

assume cs:code,ds:code

begin: jmp start

tik db 0 ; счетчиктиков

nch db 0 ; номер символа из таблицы ASCII

; резидентный обработчик

process:

Inc cs:tik ; увеличение счетчика тиков на 1

cmp cs:tik,10 ; есть 10 тиков ?

jl a1 ; если нет, то переход на завершение обработки

push ES

push AX

mov AX,0b800h ; запись адреса видеобуфера

mov ES,AX ; в сегментный регистр ES

mov cs:tik,0 ; обнуление счетчика тиков

Inc cs:nch ; переход к следующему символу таблицы

mov AL,cs:nch

mov ES:[0],AL ; вывод символа

mov ES:[1],1еН ; вывод атрибута

pop AX

pop ES

a1:

iret

; инсталлятор

start: mov AX,251cH ; запись адреса обработчика в

lea DX,process ; область векторов

Int 21h ; прерываний

lea DX,start ; выход с сохранением программы

Int 27h ; обработки в памяти

code ends

end

Пример 2. Резидентный перехватчик прерывания int 9H. Обнаруживает одновременное нажатие клавиш <Ctrl+Alt+Home> и устанавливает режим “озвучания” нажатия клавиш. При повторном нажатии той же комбинации сбрасывает режим “озвучания”. После выполнения всех операций возвращает управление старому обработчику прерывания. Резидент загружается из COM-файла. При загрузке адреса в область векторов прерываний используется “прямая” запись без использования функции DOS. При передаче управления старому обработчику используется машинный код команды jmp и следующее за ним поле, где был размещен адрес старого обработчика прерывания.

title prer

code segment

assume CS:code

org 100h

start: jmp init

; резидентный обработчик

tsr_9: push AX