Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Контрольный пример. Например, необходимо написать резидентную программу, предотвращающую повторную собственную загрузку в память



Например, необходимо написать резидентную программу, предотвращающую повторную собственную загрузку в память.

Описание программы: Программа устанавливает в цепочку векторов прерывания 0x2F (мультиплексорное прерывание) свой обработчик прерывания (процедура _ISR_int2F). Получив управление, обработчик проверяет значение регистра AX. Если значение окажется равным некоторому уникальному идентификатору (в нашем случае 0xF000), обработчик устанавливает значение регистра AL в 0xFF и возвращает управление. В противном случае обработчик передает управление дальше по цепочке векторов прерывания.

При запуске программа генерирует прерывание 0x2F, и проверяет значение регистра AX. Если значение регистра окажется равным 0xF0FF, это будет значить, что установлен наш собственный обработчик прерывания и программа уже находится в памяти.

В этом случае программа будет нормально завершена.

В противном случае будут выполнены действия по установке собственного обработчика прерывания 0x2F.

Программу рекомендуется писать на языке Ассемблер. Возможный пример кода реализации приведен ниже. Пример работы этой програм-мы представлен на рис. 3.1. Там можно увидеть реакцию системы на первую и повторную попытки запуска резидента.

Рис. 3.1. Пример работы программы

1. Проверить, установлена ли программа

mov ax, 0F000h

int 2Fh

cmp al, 0FFh

2. Программа не установлена. Следующий шаг – установить

jne InstallTSR

3. Выдать сообщение о том, что TSR установлена

mov ah, 09h

mov dx, offset MsgAlreadyInstalled

int 21h

4. Завершить программу и вернуть управление системе

int 20h

Текст кода обработчика InstallTSR:

Сохранить прежний вектор прерывания 0x2F

mov ah, 35h

mov al, 2Fh

int 21h

mov OldSegInt, es

mov OldOffInt, bx

Установить собственный вектор прерывания 0x2F

mov ax, cs

mov es, ax

mov dx, offset _ISR_int2F

mov ah, 25h

mov al, 2Fh

int 21h

Освободить незанимаемую программой память

mov bx, offset TailLabel

mov ax, cs

mov es, ax

sub bx, ax

mov ah, 4Ah

int 21h

Выдать сообщение о том, что TSR была установлена

mov ah, 09h

mov dx, offset MsgInstalled

int 21h

Завершить программу и остаться резидентом

mov ah, 31h

mov al, 0h

int 21h





Дата публикования: 2015-10-09; Прочитано: 406 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.008 с)...