Jmp Go_21h

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) до загрузки указанных выше файлов либо ничего не произойдёт, либо компьютер «зависнет».


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: