![](/user_photo/2706_HbeT2.jpg)
- •Лабораторная работа №1 Архитектура процессора Intel 8086.
- •Структура exe- и com- программы. Вывод на экран
- •Теоретические сведения Структура программы
- •Вывод на экран
- •Прерывание 21h.
- •Прерывание 10h.
- •Лабораторная работа №2 Циклы. Ввод с клавиатуры
- •Теоретические сведения Циклы в ассемблерных программах
- •Ввод с клавиатуры
- •Ввод чисел, перевод чисел в различные системы счисления
- •Теоретические сведения Ввод числовой информации
- •Перевод чисел в различные системы счисления
- •Лабораторная работа №3 Подпрограммы, работа с файлами через описатели.
- •Теоретические сведения Подпрограммы
- •Работа с файлами
- •Работа с файлами, используя dta. Psp. Окружение
- •Теоретические сведения Структура dta
- •Структура psp
- •Окружение dos
- •Лабораторная работа №4 Работа с прерываниями: перехват и восстановление.
- •Теоретические сведения Прерывания и их переопределение
- •Видеопамять
- •Порты ввода-вывода. Обмен данными с внешним устройством.
- •Теоретические сведения Команды ввода и вывода
Теоретические сведения Прерывания и их переопределение
Иногда необходимо выполнить одну из набора специальных процедур, если в системе или в программе возникают определенные условия, например, нажата клавиша на клавиатуре. Действие, стимулирующее выполнение одной из таких процедур, называется прерыванием. Существует два общих класса прерываний: внутренние и внешние. Первые инициируются состоянием ЦП или командой, а вторые - сигналом, подаваемым от других компонентов системы.
Переход к процедуре прерывания осуществляется из любой программы, а после выполнения процедуры прерывания обязательно происходит возврат в прерванную программу. Перед обращением к процедуре прерывания должно быть сохранено состояние всех регистров и флагов, используемых процедурой прерывания, а после окончания прерывания эти регистры должны быть восстановлены.
Последовательность прерывания состоит в следующем:
текущее значение регистра Flags включается в стек;
текущее значение регистра CS включается в стек;
текущее значение регистра IP включается в стек;
сбрасываются флаги IF и TF.
Новое содержимое IP и CS определяет начальный адрес выполняемой процедуры прерывания (обслуживание прерывания). Возврат в прерванную программу осуществляется командой, которая извлекает из стека содержимое для IP, CS и регистра флагов (обычно это команда IRET).
Адреса подпрограмм обслуживания прерываний (вектора прерываний) хранятся в таблице векторов прерываний. Таблица векторов прерываний располагается по адресу 0000:0000 и представляет собой массив из 256 элементов, каждый элемент которого занимает 4 байта и представляет собой начальный адрес процедуры обработки прерывания.
Иногда в программе возникает необходимость переопределения (перехвата) прерываний (например, выполнение дополнительных действий при нажатии определенной клавиши клавиатуры). Процесс перехвата прерываний состоит в следующем:
подготавливается FAR-процедура – новый обработчик прерываний (должна заканчиваться командой IRET);
сохраняется старый вектор прерывания (функция 35h прерывания 21h)
адрес нового обработчика заносится в таблицу векторов прерываний (функция 25h прерывания 21h);
в конце программы происходит восстановление первоначального обработчика прерываний.
Функция 35h
Вход. AH=35H
AL=номер прерывания (00H до 0ffH)
Выход. ES:BX=адрес обработчика прерывания
Описание. Возвращает значение вектора прерывания для INT (AL),то есть загружает в BX 0000:[AL*4], а в ES – 0000:[(AL*4)+2].
Функция 25h
Вход. AH=25H
AL=номер прерывания (00H до 0ffH)
DS:DX=вектор прерывания (адрес подпрограммы)
Выход. Нет
Описание. Устанавливает значение элемента таблицы векторов прерываний для прерывания с номером AL равным DS:DX. Это равносильно записи 4-байтового адреса в 0000:(AL*4), но, в отличие от прямой записи, в момент записи прерывания будут заблокированы.
Ниже приведен фрагмент программы, иллюстрирующий установку нового вектора прерывания вместо обработчика PrintScreen (05h).
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
;Процедура – новый обработчик прерывания
PRNSCR PROC FAR
. . .
IRET
PRNSCR ENDP
START:
XOR AX,AX ;Обычное начало для EXE-программы
MOV BX,DATA
MOV DS,BX
. . .
;Установка нового вектора
LEA DX,CS:PRNSCR ;В DX – смещения нового обработчика
PUSH DS ;Сохранение сегментного регистра DS
PUSH CS ;Следующие две строки: загрузка регистра DS
POP DS ;значением из CS через стек
MOV AH,25H ;номер функции
MOV AL,5 ;номер прерывания
INT 21H ;установка нового прерывания
POP DS ;восстановление DS
. . .
CODE ENDS