по курсу «ОСРР»
Выполнил: Клименко В. А.
Проверил: Трещев И.А.
Вариант: 10
Комсомольск-на-Амуре
Цель работы: Изучить создание TSR программ в среде MS DOS.
Задание: 1. Изучить пример составления TSR программы, разобранный в методической разработке;
2. Набрать и отладить работу программы из примера. Контроль за установлением программы в памяти и ее удалением оттуда проводить утилитой MEM;
3. Доработать программу так, чтобы TSR программа записывала в файл имена запускаемых пользователем программ.
Алгоритм работы программы
Данная программа через каждые десять секунд выдает на экран заданное текстовое сообщение.
Согласно требованиям к TSR программам в программу должны входить: модуль установки программы в память; модуль предотвращения повторной установки программы в память; модуль контроля за истечением заданного времени; модуль активизации и вывода на экран сообщения; модуль выгрузки программы из памяти.
Все процедуры размещены в модуле установки программы в памяти, который будет делиться на две части: резидентная часть и установочная часть. Резидентная часть состоит из трех процедур:
Текст программы
code_seg segment
TSRprog proc far
assume cs:code_seg
org 100h
begin:
jmp start
New_2F Proc ; обработка мультиплексного прерывания
cli ; запретим прерывания
cmp ax,08000h ; обработка мультиплексного прерывания
jne exit ;
mov ax, 0ABCDh ; отправляем отзыв
sti ;разрешить прерывания
iret
exit: sti
jmp cs:[Old_2F] ; перейти по адресу старого обработчика прерывания 2F.
Old_2F DD 0
New_2F endp
New_1C Proc
cmp cs:Cnt,182 ; прошло ли 10 сек?
jb M2 ;если нет, то переход на увеличение счетчика
mov cs:flg_timer,1
M2: inc byte ptr cs:Cnt ;увеличить счетчик времени на 1 и перейти
jmp cs:[old_1C] ;по адресу старого обработчика прерывания 2F.
Old_1C DD 0
Cnt DB 0 ;ячейка для счетчика тиков
flg_timer DB 0 ;ячейка для флага истечения заданного времени
New_1C endp
New_28 proc
pushf ;сохраним регистр флагов
cmp cs:flg_timer,1 ;если нет, переходим на старый обработчик прерывания 28h
jne M1 ;в противном случае активизируем модуль вывода сообщения на экран.
push ax
push bx
push bp
push es
push cx
; вывод строки напрямую в видеопамять:
cli
mov bx,0B800h
mov es,bx
lea bp,curtime
mov bx,0
mov cx,19
;цикл вывода строки:
vivod_on:
mov al,byte ptr cs:[bp]
mov byte ptr es:[bx],al
inc bx
mov al,74h
mov byte ptr es:[bx],al
inc bx
inc bp
loop vivod_on
mov cs: flg_timer, 0 ; сбросим флаг готовности таймера и его счетчик,
mov cs: cnt, 0 ;чтобы начался новый отсчет времени
sti
pop cx
pop es
pop bp
pop bx
pop ax
M1: popf
jmp cs:[old_28] ;передадим управление старому обработчику
curtime db " 10 seconds passed! " ;выводимая строка
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.