Mov dx,offset My_string
Pop ds
Push cs
Je Out_str
Cmp ah,9
Как правило, резидентная программа должна перехватывать то или иное прерывание, с тем чтобы программист или другие программы могли обратиться к ней.
Лекция №14. Резидентные программы.
Резидентная программа (резидент)- программа, которая постоянно находится в памяти. Примером резидента является драйвер мыши, всевозможные антивирусы, которые следят за тем, что делает та или иная программа и сообщают о ее действиях пользователю и пр.
Прерывание - это своего рода процедура (подпрограмма), которая имеет не название (например, print_string), а номер. В компьютере есть 256 различных номеров прерываний. Некоторые номера зарезервированы BIOS (ПЗУ) компьютера (например, 16h);
…
mov ah,10h
int 16h
…
или операционной системой (MS-DOS) например, 21h:
mov ah,9
mov dx,offset String
int 21h
Есть возможность перехватить, скажем, прерывание 21h, и тем самым контролировать, кто и что делает с ним.
Например, вызовем функцию 09 прерывание 21h:
|
|
mov ah,9
mov dx,offset Our_string
int 21h
...
Our_string db 'Привет!$'
В результате ОС выведет на экран сообщение "Привет!".
Можно перехватить прерывание 21h и, если какая-то программа попытается вывести на экран некую строку (не важно, какую), то мы можем в регистры ds:dx занести адрес нашей строки. В таком случае, все, что бы не выводилось на экран путем вызова функции 09 прерывания 21h, на экране будет появляться наша строка. Это можно сделать так:
Часть обработчика прерывания 21h:
...
Go_21h:
…
; здесь передаем управление "настоящему" 21h.
…
Out_str:
...
My_string db “My string!$”
…
В примере проверяем, вызывается ли функция вывода строки на экран (09h) прерывания 21h или какая-либо другая. Если вызывается другая функция (например, 3Dh), то мы просто передаем управление оригинальному обработчику. В противном случае загружаем в ds:dx адрес некоторой нашей строки и опять-таки передаём управление оригинальному обработчику прерывания 21h.
Обработчик прерывания – это процедура, постоянно (или временно) находящаяся в памяти. Обработчик прерывания первым получает управление, выполняет некоторые действия, а затем передаёт управление оригинальному обработчику (т. е. процедуре, которая уже находилась в памяти до загрузки нашего обработчика. Оригинальный обработчик может также выполнить некоторые действия, а затем передать управление другому обработчику и т.д.
Оригинальные (скажем так, первичные) обработчики MS-DOS прерываний 20h – 2Fh находятся в файле IO.SYS, MSDOS.SYS. До того момента, пока они не загрузились в память, эти прерывания «пустые». То есть при попытке вызвать одно из прерываний DOS (начиная с 20h) до загрузки указанных выше файлов либо ничего не произойдёт, либо компьютер «зависнет».