7.1.9.4. Организация прерываний

 

В микропроцессоре 8086 каждому типу прерываний присвоен свой код, распознаваемый ЦП, который может обрабатывать до 256 различных типов прерываний. Такие прерывания могут инициироваться устройствами, внешними по отношению к ЦП, или генерироваться программно командами прерывания.

Внешние прерывания. Имеются две линии передачи сигналов, которые могут использоваться внешними устройствами для сигнализации о прерываниях: линия запроса прерывания (INTR) и линия немаскируемого прерывания (NMI). На возбуждение линии INTR центральный процессор реагирует в зависимости от состояния флажка разрешения прерываний IF, но не выполняет никаких действий по обработке прерывания до тех пор, пока не будет до конца исполнена текущая команда. Поскольку сигнал INTR не запоминается в фиксаторе, он должен удерживаться на высоком уровне вплоть до момента распознавания. После этого ЦП подтверждает прием запроса прерывания путем выполнения двух последовательных циклов шины, связанных с таким подтверждением. В первом цикле посылается сигнал подтверждения приема прерывания на обработку, а во втором процессор считывает с шины данных код поступившего прерывания в диапазоне от 0 до 255, показывающий, какое именно устройство нуждается в обслуживании. Этот код используется ЦП для вызова соответствующей процедуры обработки прерывания.

Немаскируемое прерывание происходит в критических ситуациях и обычно используется для сигнализации о «катастрофических», внезапных событиях, вследствие чего оно и не может быть маскируемым. К катастрофическим событиям, как правило, относятся отказ источника питания, обнаружение ошибки в памяти или нарушение четности при работе с шиной. Немаскируемое прерывание обладает более высоким приоритетом по сравнению с обычным.

Внутренние прерывания. Команда прерывания INT вызывает формирование сигнала прерывания по окончании ее исполнения. Тип прерывания указывается в коде команды INT. Эта команда может использоваться для тестирования стандартных программ обслуживания внешних прерываний.

В случае выставления флага OF команда прерывания по переполнению (INTO) генерирует сигнал прерывания типа 4 немедленно после ее завершения. Сам ЦП формирует сигнал прерывания типа 0 сразу по окончании выполнения команд DIV (деление) или IDIV (целочисленное деление), если вычисленная величина превышает требуемую операндом приемника.

Выставление флага системного прерывания (TF) приводит к автоматическому генерированию ЦП сигнала прерывания

типа 1 после выполнения каждой команды, что имеет важное значение для организации отладки программ в пошаговом режиме.

Все внутренние прерывания (по переполнению, программное, по ошибке деления и в пошаговом режиме) имеют следующие характеристики:

Код типа прерывания содержится в самой команде прерывания или определяется заблаговременно.

Циклы шины, связанные с подтверждением приема прерывания, не выполняются.

Внутренние прерывания не могут быть заблокированы, за исключением сигналов прерывания, формируемых в пошаговом режиме выполнения программ.

Любое внутреннее прерывание (за исключением пошагового режима)имеет более высокий приоритет по отношению к любому внешнему прерыванию. Если прерывание происходит по сигналу NMI или INTR в момент выполнения некоторой команды, вызывающей внутреннее прерывание, первым будет обслужено внутреннее прерывание.

 

Таблица указателя прерываний. Эта таблица, называемая еще таблицей вектора прерываний, служит связующим звеном между кодом типа прерывания и программой его обработки. Таблица может занимать до 1К байт младших адресов памяти и содержать до 256 элементов - по одному на каждый возможный в системе тип прерывания. Элемент таблицы представляет собой 32-разрядный адрес обслуживающей программы, которой должно передаваться управление. Слово, расположенное в старших разрядах, указывает базовый адрес сегмента, а слово, записанное в младших разрядах, адрес в пределах сегмента емкостью 64К.

Процедуры обслуживания прерываний. При обращении к этим процедурам состояние флагов регистра программного сегмента и указателя команд запоминается в стеке, а флаги TF и IF сбрасываются. Далее командой STI (выставление флага разрешения прерываний) вновь разрешаются внешние прерывания, в результате чего становится возможным и прерывание самой этой процедуры сигналом INTR. В случае поступления сигнала немаскируемого прерывания NMI указанная процедура прерывается при любых условиях. Стек должен иметь емкость, достаточную для реализации максимально возможной в системе глубины вложения прерываний.

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

Пошаговое (системное) прерывание. Когда в процессоре 8086 выставляется флаг системного прерывания, считается, что работа происходит в пошаговом режиме, в котором процессор генерирует сигнал прерывания типа 1 после каждой команды. В связи с тем что ЦП при этом автоматически фиксирует состояние флагов TF и IF в стеке, а затем сбрасывает их, микропроцессор во время отработки процедуры прерывания не будет находиться в пошаговом режиме. При возврате из процедуры пошагового прерывания восстанавливается прежнее состояние флага TF, а следовательно, и пошаговый режим.

Для выставления или сброса флага TF должно изменяться отображение последнего в стеке, поскольку специальная команда для этих целей в микропроцессоре 8086 не предусмотрена.

Контрольное прерывание. В процессе отладки программ в них обычно создаются контрольные точки, позволяющие отображать или изменять состояние регистров, ячеек памяти и т.п. Такие точки могут располагаться в любом месте программы. В них формируется сигнал прерывания типа 3 (контрольная точка) командой INT3, имеющей длину 1 байт. Столь короткая команда оказывается очень простым и удобным отладочным средством, вставка которого в программу не представляет особого труда.

 

 

HotLog

Заказчику web дизайна и программирования - каталог сайтов, обзор дизайн студий