iret
exit: sti
jmp cs:[Old_2F] ; перейдем по адресу старого обработчика прерывания 2F.
Old_2F DD 0 ;Переменная для хранения оригинального адреса обработчика 2Fh
New_2F endp
;Нерезидентная часть программы:
Init:
; проверим, нет ли нашей программы в памяти:
mov ax,8899h
int 2Fh
cmp ax,0BEBEh ;проверим поступивший из прерывания «отзыв»
je tsr_runs
;Начинаем установку программы резидентом в памяти
;Для этого сначала сохраним адреса старых векторов прерываний:
mov ah,35h
mov al,21h ; номер прерывания
int 21h ;Теперь в ES:BX адрес (вектор) 21h прерывания
mov word ptr Old_21h,bx
mov word ptr Old_21h+2,es ; сохраним адрес
;Теперь перехватываем прерывание:
mov ax,2521h
lea dx,New_21h ;DX должен указывать на наш обработчик
int 21h
;То же самое проделаем с вектором 2Fh:
mov ax,352Fh
int 21h
mov word ptr old_2F,bx
mov word ptr old_2F+2,es
mov ax,252Fh
lea dx, New_2F
int 21h
Завершим программу, оставив ее резидентной в памяти:
mov dx,offset Init
int 27h
tsr_runs:
;Будем анализировать содержимое строки параметров программы:
mov si,80h ;загрузим в AL число символов в строке параметров
lodsb ;(получим его из PSP)
cmp al,5 ;если командная строка короче 5 символов - выходим
jl msg&bue
inc si ;иначе перейдем на адрес следующего байта командной строки
lodsw
cmp ax,'d/'
jne msg&bue ;проверим ключ /del
lodsw
cmp ax,'le'
jne msg&bue
;Выгрузка программы из памяти:
mov ax,3521h ;загрузим регистры ES:BX адресом нашей программы в памяти
int 21h ;и возвратим старый вектор прерываний на «родное место»
push ds ;в таблицу векторов прерываний
lds dx,dword ptr es:Old_21h
mov ax,2521h
int 21h
lds dx,dword ptr es:old_2F ;То же сделаем с прерыванием 2Fh
mov ax,252Fh
int 21h
pop ds
mov ah,49h ; освободим память, занимаемую резидентом
int 21h
;освободим память, занятую блоком окружения программы:
mov es,word ptr es:[002ch]
mov ah,49h
int 21h
jmp bue
msg&bue:
mov ah,9
lea dx, Message
int 21h
bue: mov ax,4c00h
int 21h
Message db 'Use /del$'
CSEG ends
end Start
Результат работы программы
Рис. 3. Работа TSR программы
После запуска резидента и нескольких программ (рис. 3.) в файл files.txt была записана следующая информация:
C:\BORLANDC\BIN\ROOT_R.EXE
C:\BORLANDC\BIN\ROOT_R_2.EXE
C:\T.COM
C:\OO10.COM
C:\TSR.COM
Список использованных источников
1. Фролов А.В., Фролов Г.В. Библиотека системного программиста. Т. 1. Часть 1, 2, 3. Операционная система MS-DOS. М: ДИАЛОГ-МИФИ, 1991, 1993
2. Фролов А.В., Фролов Г.В. Библиотека системного программиста. Т. 2. Аппаратное обеспечение IBM PC. Часть 1, 2. М: ДИАЛОГ-МИФИ, 1992
3. Фролов А.В., Фролов Г.В. Библиотека системного программиста. Т. 18. Часть 1, 2. MS-DOS для программиста. М: ДИАЛОГ-МИФИ, 1995
4. Фролов А.В., Фролов Г.В. Библиотека системного программиста. Т. 6. Защищенный режим процессоров Intel 80286/80386/80486. М: ДИАЛОГ-МИФИ, 1993
5. Фролов А.В., Фролов Г.В. Библиотека системного программиста. Т. 8. Локальные сети персональных компьютеров. Использование протоколов IPX, SPX, NETBIOS. М: ДИАЛОГ-МИФИ, 1993
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.