jne bue
;В противном случае начинаем модуль выгрузки программы из памяти
;Для начала загрузим регистры ES:BX адресом нашей программы в памяти
;для чего возьмем вектор любого из контролируемых ею прерываний
;например 28h
mov ax,3528h
int 21h
;Теперь сохраним регистр ds, так как сейчас начнем его портить
push ds
; загрузим регистры DS:DX адресом старого вектора прерывания 1С взятого
;из памяти нашей программы, которая сейчас стоит резидентом.
lds dx,dword ptr es:old_1C
;и возвратим его на «родное место» в таблицу векторов прерываний
mov ax,251Ch
int 21h
;То же сделаем с прерыванием 28h
lds dx,dword ptr es:old_28
mov ax,2528h
int 21h
;И прерыванием 2F
lds dx,dword ptr es:old_2F
mov ax,252Fh
int 21h
;Восстановим регистр DS
pop ds
;Используя стандартную функцию 49h прерывания 21h, освободим память, зани- ;маемую нашей резидентной программой. Функция освобождает память, сегмент
;которой стоит в ES. А там как раз адрес начала нашей резидентной программы.
mov ah,49h
int 21h
;Теперь надо освободить память, занятую блоком окружения программы. Надеюсь
;Вы помните, что при запуске программы операционная система создает два бло;ка управления памятью (MCB) – один для самой программы, а второй для тексто;вых строк, взятых их файла autoexec.bat с ключем set. Этот блок называется
;«блоком окружения» и его сегментный адрес операционная система заносит в
;PSP программы в слово по смещению 02Ch от начала PSP. Возьмем оттуда этот
;адрес и поместим его в ES
mov es,word ptr es:[002ch]
;После чего дадим команду освободить этот блок
mov ah,49h
int 21h
;Теперь можно завершить программу и возвратиться в операционную систему
bue: mov ax,4c00h
int 21h
Компоновка текста программы
Для компилирования программы в компиляторе TASM надо облечь ее в стандарный листинг, структурный вид которого изображен ниже:
|
TSRprog proc far
assume cs:code_seg
org 100h
begin:
jmp start
|
TSRprog endp
code_seg ends
end begin
Компилирование производим стандартными командами:
TASM namefile.asm
TLINK /t namefile.obj
Задание на лабораторную работу
Изучите теоретический материал по составлению TSR программ в среде MS DOS.
1. Изучите пример составления TSR программы, разобранный в методической разработке.
2. Наберите и отладьте работу программы из примера. Контроль за установлением программы в памяти и ее удалением оттуда проводите утилитой MEM.
3. Доработайте программу так, чтобы:
№ варианта |
Доработать текст программы, приведенной в примере, так чтобы: |
1, 7, 13 |
Выдавалось три сообщения: - до окончания работы осталось 30 сек. - до окончания работы осталось 20 сек. - до окончания работы осталось 10 сек, после чего компьютер перезагружался |
2, 8, 14 |
При нажатии клавиш Alt+Z на экран выдавалось сообщение: Я еще работаю! |
3, 9, 15 |
Сообщение выдавалось циклично и всегда в разном месте экрана. |
4, 10, 16 |
TSR программа записывала в файл имена запускаемых пользователем программ |
5, 11, 17 |
заменить работу процедуры New_1C использованием функции 83h прерывания 15h. Порядок работы функции изучить самостоятельно по справочнику TECH HELP. |
6, 12, 18 |
При трехкратном нажатии клавиши ScrollLock на экран выдавалось сообщение: Готов к приему данных! |
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.