Информатика: Методические указания к лабораторным работам. Часть 2. Ассемблер, страница 8

Резидентные в памяти программы (TSR-программы) используют­ся, как правило, для организации обработкиаппаратных или прог­раммных прерываний в фоновом режиме.  Реализациятаких программ имеет ряд особенностей как при установке, так и в процедуре об­работки прерываний.

Завершение TSR-программы выполняется с помощью функции 27Н прерывания DOS INT 21H.  При этом в DX помещается  смещение  от начала префикса программного сегмента (PSP) задачи до последне­го байта +1.

Для перехвата  вектора прерывания используется "функция 25Н прерывания INT 21H (см. описание лабораторной работы N 5).

Пример структуры TSR-программы, оформленной в виде СОМ-файла, приведен ниже.

.MODEL TINY                                ;генерировать.СОМ - файл

.286                                               ;разрешение использования

                                                        ;PUSHA, РОРА

;-------------------------------------------------------------------------------------------------------

VECT EQU 60H                              ;перехватываемый вектор

;-------------------------------------------------------------------------------------------------------

.STACK lOOh                                ;стек 256 байт

.CODE                                        ;начало кодового сегмента

.STARTUP                                     ;инициализировать сегменты

;-------------------------------------------------------------------------------------------------------

MOV, DX, OFFSET new_lnt       ; DS:DX - адрес обработчика

MOV АН, 25Н

MOV AL, VECT

INT 21H                                     ;установка нового вектора

LEA DX, last                               ;адрес последнего байта + 1

INT 27H                    ;TSR

;-------------------------------------------------------------------------------------------------------

new_lnt PROC FAR                ;обработчик прерывания

PUSHA                                         ;сохранение всех регистров

;Здесь реализуется обработка                     ;прерываний

РОРА                                             ; восстановление всех регистров

IRET                                              ; возврат из прерывания

last:

new_int ENDP

;--------------------------------------------------------

END

3. Методические указания

В лабораторной работе требуется реализовать TSR-программу, выполняющую определенные  функции  по  запросу другой программы (по аналогии с обращениями к DOS). TSR-программа должна исполь­зовать любой свободный вектор прерывания,  начиная с бон. офор­мить ее следует в виде  СОM-файла  (установите  соответствующий режим компоновщика!).

Для реализации действий в TSR - программе используйте  об­ращения к BIOS.  Описание функций см. в лабораторной работе N3. Обращения к TSR-программе должны выполняться из другой програм­мы, написанной на СИ с ассемблерными вставками.

При отладке TSR-программы нельзя использовать оболочку QU-ICK-C. Перед ее запуском выйдите из QUICK-C и из Norton Comman­der. Если  требуется повторно запустить TSR-программу - рестартуйте компьютер.

4. Порядок выполнения работы

1.Написать TSR-программу на Ассемблере для обработки пре­рываний,  выполняющую действия (функции) в соответствии с вари­антами заданий, приведенными ниже.

2. Написать  СИ-программу  для тестирования TSR-програмиы. Программа должна выполнять обращения к TSR-программе через век­тор прерывания. Обращение выполнить в виде ассемблерных вставок (директива _asm).

3. Произвести отладку этих программ.

Задания к лабораторной работе.

(функции, выполняемые TSR-программой)

Вариант 1.

1. Очисткаэкрана

2. Вывод символа с заданными координатами

3. Позиционирование курсора в начало экрана

Вариант 2.

1. Очисткаэкрана

2. Вывод заданного символа в начале последней строки

3. Позиционирование курсора в начало текущей строки

Вариант 3.

1. Очистка экрана

2. Вывод заданного символа в левом верхнем углу экрана

3. Позиционирование курсора в конец последней строки

Вариант 4.

1. Очистка экрана

2. Выдача звукового сигнала (Печать символа с кодом 7)

3. Позиционирование курсора в конец текущей строки

Вариант 5.

1. Очистка экрана

2. Вывод заданного символа в центре экрана

3. Позиционирование курсора в конец первой строки

Вариант 6.

1. Очистка экрана

2. Вывод заданного символа в конце текущей строки

3. Позиционирование курсора в центр экрана