![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Например, необходимо написать резидентную программу, предотвращающую повторную собственную загрузку в память.
Описание программы: Программа устанавливает в цепочку векторов прерывания 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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!