Создание TSR программ в ОС MS DOS

Страницы работы

Содержание работы

Министерство образования и науки РФ

Федеральное агентство по образованию

Государственное образовательное учреждение высшего профессионального образования

 «Комсомольский-на-Амуре Государственный Технический Университет»

Факультет компьютерных технологий

Кафедра МОП ЭВМ

ЛАБОРАТОРНАЯ РАБОТА 5

по курсу «ОСРР»

Выполнил:                                                                                                         Клименко В. А.

Проверил:                                                                                                          Трещев И.А.

Вариант:                                                                                                            10

Комсомольск-на-Амуре

2006


Тема:                         «Создание TSR программ в ОС MS DOS».

Цель работы:          Изучить создание TSR программ в среде MS DOS.

Задание:                    1. Изучить пример составления TSR программы, разобранный в методической разработке;

2. Набрать и отладить работу программы из примера. Контроль за установлением программы в памяти и ее удалением оттуда проводить утилитой MEM;

3. Доработать программу так, чтобы TSR программа записывала в файл имена запускаемых пользователем программ.


Алгоритм работы программы

Данная программа через каждые десять секунд выдает на экран заданное текстовое сообщение.

Согласно требованиям к TSR программам в программу должны входить: модуль установки программы в память; модуль предотвращения повторной установки программы в память; модуль контроля за истечением заданного времени; модуль активизации и вывода на экран сообщения; модуль выгрузки программы из памяти.

Все процедуры размещены в модуле установки программы в памяти, который будет делиться на две части: резидентная часть и установочная часть. Резидентная часть состоит из трех процедур:

  1. Модуль предотвращения повторной установки программы в память и, одновременно, модуль выгрузки программы из памяти. Модуль будет устанавливаться вместо стандартного обработчика прерывания 2Fh. Сама программа будет закреплена за функцией 80h, подфункция 00h. При наличии программы в памяти она будет отзываться на запрос прерывания 2Fh  кодом  0ABCDh, возвращаемом в регистре AX. Выгружать программу из памяти будем тогда, когда в командной строке программы будет задан ключ  /u.
  2. Модуль контроля за истечением заданного времени будет устанавливаться на стандартное прерывание 1Ch (пользовательское прерывание таймера). Оно вызывается 18,2 раза в секунду, следовательно, чтобы отсчитать промежуток времени в 10 заданных нам секунд надо пропустить 182 прерывания, после чего программа должна установить в некоторой ячейке, которую назовем «Флаг истечения времени», единицу, что будет являться сигналом для следующего блока, что заданное время ожидания истекло.
  3. Модуль активизации и печати сообщения будет установлен взамен стандартного прерывания 28h. Это прерывание вызывается операционной системой в тот момент, когда она свободна и может выполнять запросы 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! "    ;выводимая строка

Похожие материалы

Информация о работе

Тип:
Отчеты по лабораторным работам
Размер файла:
110 Kb
Скачали:
0