Прерывание – это действие, производимое компьютером для выполнения системных и сервисных функций во время работы основного процесса.
3 этапа:
Приостановление выполнения основного процесса
Обработка прерывания
Возврат управления основному процессу
2 вида прерываний:
· Аппаратное
· Программное (функцию пишем сами, поддерживает система)
Адрес подпрограммы обработчика прерываний называется вектор. Длина 4 байта. В первом слове вектора хранится содержимое IP, во втором CS. Младшие 1024 байта памяти содержат таблицу, названную таблицей векторов прерывания. Младший байт слова всегда в памяти располагается первым.
Соответственно, если какой-то вектор
CS IP
AF20 : 3P8A
то в памяти он 8A3P20AF.
retn, rets, IRET
Для контроллера тоже должен быть сигнал окончания прерывания:
mov al, 20h
out 20h, al
В соответствии с описанием процессора некоторые вектора выполняют специфические действия, некоторые свободные.
0 вектор – деление на 0
1 номер – пошаговое выполнение
2 номер – немаскированное прерывание
3 номер – прерывание в точке останова
4 номер – переполнение
5 номер – печать содержимого экрана
8 номер – аппаратное прерывание на линии 0 (таймер)
9 номер – аппаратное прерывание на линии 1 (клавиатура)
0A номер – резерв
0B номер – аппаратное прерывание на линии 3 (COM 2)
0C номер – аппаратное прерывание на линии 4 (COM 1)
0D номер – аппаратное прерывание на линии 5 (жесткий диск)
0E номер – аппаратное прерывание на линии 6 (гибкий диск)
0F номер – аппаратное прерывание на линии 7 (принтер)
10 номер – обслуживание дисплея
11 номер – информация об оборудовании
12 номер – размер памяти
13 номер – обслуживание ввода- вывода на диске
14 номер – обслуживание последнего порта (использование либо 14 прерывания, либо путем записи управленческий слов в порт ввода- вывода)
16 номер – обслуживание клавиатуры
19 номер – перезагрузка системы
1A номер – получение установления даты и времени
1C номер – пользовательский таймер
Процессоры 8086 допускают обработку трех типов прерывания:
· Внутренне прерывание, генерируемое микропроцессором в случае возникновения особых ситуаций при его работе
· Немаскированное прерывание, которое используется для выявления ошибок в памяти
Они поступают в микропроцессор через микросхему 8259А программным контроллером прерывания. Для обработки одновременно возникших прерываний используются встроенные системы приоритета. Предпочтение отдается обработке внутренних прерываний, такое как деление на ноль, произведение Ø самое высокое, FF самое низкое.
При возникновении любого прерывания процессор заносит содержимое стека в регистр состояния, сбрасывает флаг произведения и заносит в содержимое регистры CS и SP. Затем путем считывания с линии данных номера прерывания и умножения его на 4, выбирается новый адрес, который является новым содержимым регистров CS и SP.
Внешним устройствам приписываются вполне определенные линии прерывания, связанные с микросхемой 8259А. Данные линии называются IRQ. Когда устройство требует обслуживания со стороны системы, от устройства к контроллеру 8259 подается сигнал. По линии IRQ устанавливается большой сигнал и подается в процессор. Процессор сбрасывает флаг прерывания и сохраняет CS и SP. После получения по …… произведения сбрасывает флаг, записывает CS и SP и по линии подает сигнал, подтверждающий обработку прерывания.
Микросхема 8259 функционально состоит и трех частей:
1. регистр, требующий обработку прерываний (IRR); используется для того, чтобы заполнить возникшие прерывания (их может быть несколько) (8 прерываний)
2. регистр ISR обслуживает прерывания, указывает на то, какое прерывание обслуживает система в данный момент
3. регистр маскирования прерывания IMR (доступен как для чтения, так и для записи)
Каждому виду регистра IMR соответствует линия прерывания IRQ. С помощью данного регистра можно запросить или разрешить данное прерывание. Установка бита в регистр IMR приводит к маскированию соответствующий линии обработки и обработка прерывания не происходит.
Наивысший приоритет у IRQ0, наименьший – у IRQ7.
В микропроцессоре 80286 стало 16 линий путем добавления второй микросхемы 8259.
Каскадный эффект достигается при подключении к линии 2 второго устройства:
RQ0 – прерывание 8 – таймер
RQ1 – прерывание 9 – клавиатура
RQ2 – вектор 0А – запрос от подчиняющегося устройства
RQ8 – прерывание 70 – обслуживание часов реально времени
RQ9 – прерывание 71 – программное предназначение
RQ10, 11, 12 – порты последовательно 72, 73, 74 резерв
RQ13 – прерывание 75 – арифметический сопроцессор
RQ14– прерывание 76 – контроллер винчестера
RQ15– прерывание 77 – резерв
RQ30В – COM1 и т.д., как было до этого
Маскированные прерывания могут быть запрещены, внутренние и немаскированные – нет.
Любая программа, которая изменяет некоторые векторы прерывания перед тем, как осуществить возврат в MS-DOS, должна переустановить первые значения этого вектора. Для того, чтобы изменить вектор прерывания, используют функции:
· 35h – получить вектор прерывания (прерывание
· 25h – установить вектор прерывания 21h)
Вызов 35h получает содержимое CS и SP. Вызов 25h в качестве параметров передается адрес обработчика.
Каждый вектор имеет свой номер (0- 255).
mov al,00h ;читает символ, введенный
int 16h ;с клавиатуры
Обработка прерывания может происходить в соответствии с тремя основными схемами.
1. Сначала вызывается системный обработчик, затем добавленный. Данный способ используется для дополнения системной обработкой какой- либо функции.
Последовательность:
Pushf – в стек заносим флаги
Call SYS – системная обработка
USER – переход в нашу программу
Iret – завершение (возврат из прерывания)
Сначала выполняется пользовательская обработка, затем системная.
2. USER – пользовательская обработка, сохранение SP и CS.