- •Новосибирский государственный технический университет
- •Лабораторная работа № 2 обработка массивов данных. Интерфейс с языками высокого уровня.
- •Лабораторная работа n 3 прерывания. Интерфейс с базовой системой ввода - вывода
- •Лабораторная работа n 4 программные прерывания. Интерфейс с операционной системой
- •Обработка аппаратных (асинхрониых) прерываний.
- •Лабораторная работа n 6 программы, резидентные в памяти (tsr).
Обработка аппаратных (асинхрониых) прерываний.
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СН - таймер. В головной программе организован цикл ввода-вывода строк. Подпрограмма обработки прерывания должна заменять первый символ в строке с курсором на знак "$". Старое положение курсора нужно сохранять.