Базовый вектор 70h базовый вектор 8h

Система прерываний

Система прерываний любого компьютера является его важнейшей частью, позволяющей быстро реагировать на события, обработка которых должна выполняться немедленно: нажатия клавиш клавиатуры или мыши, сбои памяти и пр.

Прерывания осуществляются аппаратными средствами, которые заставляют процессор приостановить выполнение текущей программы и отреагировать на внешнее событие. Прерывания используют в качестве удобного средства, обеспечивающего доступ к аппаратурному оборудованию и обслуживающим программам операционной системы. Они дают возможность осуществлять операции ввода/вывода независимо от процессора. Поскольку быстродействие процессора значительно выше, чем у устройств ввода/вывода данных, желательно, чтобы процессор имел возможность выполнять другие функции вместо осуществления постоянного контроля за состоянием подсоединенных к нему периферийных устройств. Когда же устройство вв/выв требует обслуживания со стороны процессора, оно сообщает об этом процессору формированием соответствующего запроса (сигнала), по которому может быть прервано выполнение текущей программы процессором. Сигналы внешних аппаратных прерываний, возникающие в устройствах, входящих в состав ПК (таймер, клавиатура, диски и пр.), поступают в процессор не непосредственно, а через контроллер прерываний, в качестве которого используется микросхема Intel 8259A. Прежде чем реагировать на прерывание, CPU i8086 обычно завершает выполнение текущей машинной команды. Время, необходимое процессору для того, чтобы отреагировать на требование прерывания, называется задержкой прерывания.

К восьми входным выводам контроллера прерываний IRQ0 … IRQ7(interrupt request – запрос прерывания) подключаются выводы устройств, на которых возникают сигналы прерываний. Выход INT контроллера подключается к одноименному входу микропроцессора.

Т.о.основная функция контроллеров – передача сигналов запросов прерываний от внешних устройств на один вход прерываний CPU.

Кроме сигнала INTконтроллеры по линиям данных передают в CPU номер вектора, который образуется в контроллере путем сложения базового номера, записанного в одном из его регистров с номером входной линии, по которой поступил запрос прерывания.

Номер вектора = базовый номер контроллера + номер входной линии

Номера базовых векторов заносятся в контроллеры автоматически в процессе начальной загрузки ПК. Поскольку базовый вектор всегда равен 8, номера векторов, закрепленных за аппаратными прерываниями, лежат в диапазоне 8h … Fh. Очевидно, что номера векторов аппаратных прерываний однозначно связаны с номерами линий, или уровнями IRQ, а через них с конкретными устройствами ПК.

Таблица 1. Соответствие векторов прерываний устройствам ПК для машин типа IBM PC/XT.

Уровень прерывания Вектор прерывания Устройство
IRQ0 08h Таймер
IRQ1 09h Клавиатура
IRQ2 0Ah Резерв для подключения нестандартных устройств
IRQ3 0Bh Последовательный порт COM1
IRQ4 0Ch Последовательный порт COM2
IRQ5 0Dh Жесткий диск
IRQ6 0Eh Гибкий диск
IRQ7 0Fh Принтер LPT1

Контроллеры IBM PC/AT комплектуются большим количеством устройств, способных возбуждать сигналы прерываний. Однако каждый контроллер прерываний может воспринять только 8 таких сигналов. Для обслуживания большего количества устройств контроллеры можно объединять, образуя из них веерообразную структуру (в пределе можно к каждому из входов объединяющего, ведущего контроллера подсоединить свой ведомый и в итоге получить систему с 64 входами запросов прерываний). Сигналы аппаратных прерываний, возникающие в устройствах, входящих в состав PC/AT или подключенных к нему, поступают в CPU не непосредственно, а через 2 контроллера прерываний ведущийиведомый,увеличивая тем самым возможное число для входных устройств до 15 (7 у ведущего и 8 у ведомого контроллера).

Для ведущего контроллера базовый номер = 8h, а для ведомого – 70h. Следовательно, номера векторов, закрепленных за аппаратными прерываниями, лежат уже в диапазонах 8h… Fh и 70h … 77h.

Итак, к входным выводам IRQ0 … IRQ7 и IRQ8 … IRQ15 контроллеров подключаются выводы устройств, на которых возникают сигналы прерываний. Выход INT ведомого контроллера подсоединяется к входу IRQ2ведущего, а выход INTведущего - как и раньше, к входу INT микропроцессора.

Организация аппаратных прерываний в машинах типа IBM PC/AT.

IRQ8   Ведомый контроллер прерываний   IRQ0   Ведущий контроллер прерываний INT  
       
IRQ9     IRQ1     Микро- процессор
     
IRQ10          
       
IRQ11     IRQ3  
      Вектор
IRQ12     IRQ4    
       
IRQ13     IRQ5    
       
IRQ14     IRQ6    
       
IRQ15     IRQ7    
       

базовый вектор 70h базовый вектор 8h

Семейство CPU i8086/8088 имеет простую, но очень гибкую систему прерываний. Каждому прерыванию соответствует код, по которому его различает процессор. В системе может быть до 256 типов прерываний. Прерывания могут генерироваться требованиями устройств вв/выв, внешними по отношению к процессору, эти прерывания могут быть как маскируемыми, так и немаскируемыми.

Прерывание считается маскируемым, если реакция на него со стороны процессора зависит от состояния флага разрешения прерывания IF. Если IF содержит 0 (прерывание невозможно), CPU игнорирует запрос, и маскируемые прерывания должны ждать обслуживания центральным процессором. При состоянии флага IF=1 (прерывание разрешено) выполнение текущей программы приостанавливается, и процессор обслуживает запрос на прерывание.

Немаскируемые прерывания имеют в ПК наивысший приоритет и должны обслуживаться процессором немедленно. Немаскируемые прерывания – это фактически "катастрофы", такие, как ошибки памяти или признаки сбоя питания.

Прерывания могут быть также внутренними, возникающими в прикладных программах при определенных условиях, таких как, например, INTO (прерывание по переполнению), когда флаг OF=1.

Общая схема обработки запроса на прерывание следующая:

Реализуемая в момент появления запроса на прерывание машинная команда всегда выполняется до конца. Процессор считывает из контроллера прерывания номер прерывания. (При начальном программировании микросхемы контроллера обработки прерываний каждому входу запроса прерывания присваивается определенный номер). По считанному номеру осуществляется генерация соответствующей команды прерывания. По этой команде из области памяти, отведенной для адресов (векторов) подпрограмм, обслуживающих эти прерывания, выбирается соответствующий адрес и по нему происходит вызов подпрограммы.

Таким образом, векторы прерываний служат для идентификации процедур, необходимых для обслуживания требований прерывания.

Существует 256 векторов прерываний, поэтому каждому внешнему требованию на прерывание может быть поставлен в соответствие код прерывания в пределах 0 – 255. Таблица векторов прерываний занимает 1024 младших байта памяти (байты от 00000 до 003FFh) и имеет 256 входов в соответствии с количеством векторов.

Каждый вход таблицы является указателем двойного слова (4 байта), содержащего начальный адрес процедуры, которая обеспечивает обслуживание требования на прерывание данного типа. Можно считать, что вызов подпрограммы обработки прерываний аналогичен вызову одной из предопределенных подпрограмм всегда находящихся в одном месте. Старшее 16-битовое слово каждого входа таблицы содержит базовый адрес сегмента, в котором находится процедура. Младшее 16-битовое слово содержит смещение процедуры внутри сегмента. Т.к. каждый вход таблицы занимает 4 байта, адрес входа для прерывания данного типа (адрес младшего байта двойного слова) может быть определен умножением кода типа прерывания на 4.

Старший адрес

003FFh Указатель типа 255
00020h Указатель типа 8 (таймер)
0001Ch Указатель типа 7 (резерв)
00018h Указатель типа 6 (резерв)
00014h Указатель типа 5 (выдача на экран)
00010h Указатель типа 4 (переполнение)
0000Ch Указатель типа 3 (один байт содержит CCh)
00008h Указатель типа 2 (немаскируемые прерывания по NMI)
00004h Указатель типа 1 (пошаговый режим)
00000h Указатель типа 0 (ошибка деления)

Младший адрес

Наши рекомендации