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

Лабораторная работа №2

Контроллер прерываний ВН59А

Обработка прерываний.

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

Все прерывания в системе можно разделить на внутренние и внешние. Внешние прерывания вызываются событиями, внешними по отношению к МП, а внутренние – событиями, происходящими внутри МП.

Конечно, обработка прерываний в МП различных типов имеет свои особенности, однако общая схема действий для любых МП остается одной и той же.

При обработке внутреннего прерывания МП «известна» его причина, а, следовательно, известен источник запроса. Поэтому, укрупнено, при внутреннем прерывании МП выполняет следующие действия:

· запоминает в стеке адрес возврата в прерываемую программу;

· определяет начальный адрес обработчика для известного источника запроса и передает управление этому обработчику;

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

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

Существуют два метода определения внешнего источника запроса:

· метод опроса;

· векторные прерывания.

Метод опроса. Этот метод можно реализовать, например, следующим образом. В систему вводится специальный порт (или несколько портов, при большом числе внешних источников прерываний). Все внешние запросы заводятся на входы этого порта, причем для каждого запроса отводится один бит порта. Одновременно, все запросы через схему ИЛИ заводятся на вход INTR МП. На рис. 1 приводится подобная схема для восьми внешних источников прерываний (IR7 – IR0).

Восприняв запрос на входе INTR, МП выполняет следующий фрагмент программы:

in al, port_int ; читаем port_int

shl al, 1; сдвигаем содержимое al на один разряд влево

jc obr7 ; если флаг cf установлен, то это запрос по линии

; IR7, и мы переходим к обработчику этого

; прерывания

shl al, 1 ; сдвигаем al еще на один разряд влево

jc obr6; если cf установлен, это запрос по IR6

и. т. д.

 
  Система прерываний ВМ86 - student2.ru

Рис. 1 Реализация метода опроса.

Возможна ситуация, когда МП получает сразу несколько запросов на прерывание от разных внешних источников. Чтобы МП мог в такой ситуации функционировать, всем источникам запросов присваиваются приоритеты. При одновременном поступлении нескольких запросов, обслужен будет запрос с наивысшим приоритетом. Для нашего примера старший приоритет будет у IR7, а младший – у IR0. Для того чтобы изменить приоритеты в нашем примере на противоположные, достаточно использовать команду сдвига вправо.

Достоинством метода опроса являются небольшие аппаратурные затраты, а недостатком – медленная реакция МП на запросы с низким приоритетом.

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

Система прерываний ВМ86.

В МП ВМ86 каждому источнику запроса на прерывание ставится в соответствие так называемый тип (номер) прерывания. Тип имеет формат 1 байт. То есть всего возможно 256 различных источников запросов. Для того чтобы МП по известному типу мог определить начальный адрес обработчика, в ОП создается таблица векторов прерываний. Каждый вектор представляет собой пару «сегмент:смещение» и однозначно задает начальный адрес обработчика прерывания данного типа. В ОП вектор занимает 4 байта. Таблица прерываний ВМ86 всегда располагается в младшем килобайте ОП. Ее формат приведен на рис. 2.

Здесь displ и disph – соответственно младший и старший байт смещения, а segl и segh – младший и старший байт сегмента. Из рис.20 видно, что для определения адреса вектора достаточно взять тип и умножить его на 4. Именно так и вычисляет адрес вектора МП. Так как таблица прерываний располагается по младшим адресам ОП, никакие сегментные регистры в формировании адреса вектора участия не принимают.

 
  Система прерываний ВМ86 - student2.ru

Рис. 2 Формат таблицы прерываний

При восприятии любого прерывания ВМ86 выполняет следующую последовательность действий:

· запоминает в стеке содержимое регистра флагов f и адрес возврата (содержимое регистров cs и ip);

· по известному типу находит в таблице соответствующий вектор и загружает disp в ip, а seg – в cs, тем самым, передавая управление обработчику.

Помимо рассмотренных выше двух пунктов, МП также сбрасывает в ноль флаги if и tf, маскируя внешние прерывания и запрещая пошаговое выполнение обработчика.

Возврат из обработчика в фоновую программу осуществляется по команде iret, которую ставит в обработчике программист. Данная команда последовательно выталкивает из стека три слова. Первое попадает в ip, второе вcsи третье в регистр флаговf.Таким образом, управление передается фоновой программе в ту точку, на которую указывает адрес возврата.

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