Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Идентификация прерываний




Архитектура микропроцессоров семейства 8086 не позволяет однозначно идентифицировать источники некоторых прерываний по вектору. Например, прерывание по вектору 0 может произойти по одной из следующих причин:

- по обнаружению ошибки во время выполнения инструкций деления DIV и IDIV;

- по инструкции INT 0;

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

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

Если данному вектору прерывания не соответствует какая-либо линия запроса внешнего прерывания (IRQ), то и произойти это прерывание по внешнему запросу не могло. Рассмотрим способы анализа нескольких первых видов прерываний.

Прерывание по вектору 0. Сохранённый в стеке адрес будет указывать на команду деления, вызвавшую прерывание, в то время как при выполнении инструкции INT 0 – на следующую за ней инструкцию, которая также может оказаться командой деления. Необходимо проанализировать код команды, на которую указывает сохранённый в стеке адрес инструкции – если это не команда деления, то причиной прерывания является инструкция INT 0.

Если сохранён адрес команды деления, то требуется проверка её параметров. Если они окажутся корректными, то прерывание возникло из-за инструкции INT 0, непосредственно предшествующей команде деления. Если параметры некорректны, причиной могла послужить и предшествовавшая инструкция INT 0, и инструкция деления.

Прерывание по вектору 1. Чтобы определить, произошло ли прерывание по вектору 1 в результате трассировки выполнения программы с помощью флага TF или из-за выполнения инструкции INT 1, необходимо проверить состояние флага TF, сохранённом в стеке в процессе прерывания.

Если флаг сброшен, прерывание было вызвано инструкцией INT 1. Если флаг установлен, то имело место прерывание трассировки, что, однако, не исключает вероятности того, что одновременно была выполнена и инструкция INT 1. Однозначная идентификация в такой ситуации невозможна по той же причине, что и для вектора 0.

Прерывание по вектору 2. Прерывание может произойти либо при поступлении внешнего сигнала немаскируемого прерывания NMI, либо при выполнении двухбайтовой команды INT 2. Однозначная идентификация возможна только в случае, если аппаратура микропроцессорной системы обеспечивает программно-доступную фиксацию сведений о возникшем немаскируемом прерывании.

Прерывания по векторам 3 и 4. Прерывания могут быть программно однозначно идентифицированы: они происходят либо из-за выполнения однобайтовых инструкций INT 3 и INTO (коды CC и CE соответственно), либо из-за двухбайтовых инструкций INT 3 и INT 4 (коды CD 03 и CD 04 соответственно).

Таким образом, в связи с отсутствием однозначной идентификации при возникновении прерывания его обработчик должен определить конкретную причину возникновения прерывания. В общем случае невозможно точно идентифицировать источник прерывания по векторам 0–2.




Поделиться с друзьями:


Дата добавления: 2014-11-16; Просмотров: 1064; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.