Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metodichka.doc
Скачиваний:
9
Добавлен:
27.03.2015
Размер:
122.88 Кб
Скачать

Обработка аппаратных (асинхрониых) прерываний.

1. Цель работы

Ознакомиться с функциями DOS, связанными с установкой век­тора прерываний. Ознакомиться с особенностями написания подп­рограмм обработки прерываний.

2. Краткие теоретические сведения

Для установки нового вектора Прерывания используется функция 25Н прерывания INT 21H. Предварительно в пару DS:DX необхо­димо повестить адрес подпрограммы - нового обработчика прерыва­ний, а в регистр AL - номер перехватываемого вектора.

Структура подпрограммы обработки прерываний имеет ряд осо­бенностей. Основные из них:

- обязательное сохранение и восстановление всех используе­мых регистров;

- обязательная установка регистра DS

- использование обращений к DOS при обработке асинхронных прерываний в большинстве случаев невозможно. Можно использовать только обращения к BIOS.

- возврат из подпрограммы выполняется командой IRET

Пример реализации подпрограмм установки вектора и обработ­ки прерываний приведен ниже.

.MODEL small,с

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

;PUSHA, РОРА

EXTRN sym:ВУТЕ ;глобальные данные из СИ-программы

.CODE

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

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

MOV AX, SEG sym ;установка нужного значения

MOV DS, AX ;сегментного регистра

;

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

;

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

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

new_int ENDP

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

setvect PROC NEAR ;процедура установки вектора

PUSH DS

MOV AX, SEG new_int

MOV DS, AX

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

MOV АН, 25Н

MOV AL, N Вектора

INT 2lH ;установка нового вектора

POP DS

RET

setvect ENDP

END

В этом примере переменная sym используется для передачи в подпрограмму обработки прерывания байта (байтов) из Си-программы. Примеры обращения к данным:

MOV AL, sym ;char sym

если передается массив:

LEA SI,sym

MOV AL, [SI] ;первый байт массива

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

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

Данные, необходимые для подпрограммы обработки прерывания, передаются из Си-программы через глобальные переменные. Исполь­зуйте в ассемблерной программе директиву EXTRN. Обратите внима­ние на правильную установку регистра DS.

Старый вектор прерывания сохранять не нужно. Для временно­го хранения данных (например, координат курсора) используйте стек.

В подпрограмме обработки прерывания следует использовать функции BIOS. Необходимая информация приведена в описании лабо­раторной работы N 3. можно также воспользоваться справочной ин­формацией QUICK-С.

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

1. Написать головную программу на Си для вызова функции обработки строк, содержащую:

- прототип ассемблерной функции установки вектора прерыва­ния

- вызов ассемблерной функции для перехвата вектора преры­вания

- цикл для ввода текста или символов (в зависимости от ва­рианта)

2. Написать ассемблерные функции для перехвата вектора прерывания и обработки прерываний (по вариантам).

3. Выполнить компиляцию и компоновку программы и произвес­ти ее отладку.

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

Вариант 1.

Программа перехватывает прерывание 5 - PrintScreen. В головной программе реализован цикл ввода и вывода строк. При нажатии на клавишу PrintScreen в центре экрана должна выво­диться строка, введенная в головной программе последней. Подп­рограмма обработки прерывания должна сохранять текущую позицию курсора на экране.

Вариант 2.

Программа перехватывает прерывание 5 - PrintScreen. В головной программе реализован цикл ввода символов с эхо-печатью. При нажатии не клавишу PrintScreen в правом верх­нем углу экрана должен выводиться символ, введенный последним. •Подпрограмма обработки прерываний должна сохранять текущую по­зицию курсора на экране.

Вариант 3.

Программа перехватывает прерывание 5 - PrintScreen. В головной программе реализован цикл ввода-вывода строк текста. При нажатии на клавишу PrintScreen подпрограмма обра­ботки прерываний должна очищать экран с сохранением позиции курсора и выдачей звукового сигнала.

Указание. Для очистки экрана использовать функцию установ­ки видеорежима (INT 10H, функция 0Н, AL=3).

Вариант 4.

Программа перехватывает прерывание 1СН - таймер. В головной программе реализован цикл ввода-вывода символов с эхо-печатью. Подпрограмма обработки прерывания должна выво­дить в правом верхнем углу экрана последний введенный символ. Текущая позиция курсора на экране должна быть сохранена.

Вариант 5.

Программа перехватывает прерывание 1СН - таймер. • В головной программе реализован цикл ввода-вывода строк. Подпрограмма обработки прерывания•должна выводить в центре эк­рана на цветном фоне первый символ последней введенной строки. Текущее положение курсора на экране нужно сохранить.

Вариант 6.

Программа перехватывает прерывание 1СН - таймер. В головной программе организован цикл ввода-вывода строк. Подпрограмма обработки прерывания должна заменять первый символ в строке с курсором на знак "$". Старое положение курсора нужно сохранять.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]