КАТЕГОРИИ: Архитектура-(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) |
Обработка прерывания в IBM PC
Обработка прерываний производится в три этапа: 1. Прекращение выполнения текущей программы. Должно произойти так, чтобы потом вернуться и продолжить работу. Для этого необходимо сохранить содержимое регистров, так как они являются ресурсами, разделяемыми между программами. Обязательными для сохранения являются регистры cs, ip, flags (пара CS:IP содержит адрес команды, с которой необходимо начать выполнение после возврата, flags - состояние флагов после выполнения последней команды прерванной программы). !!! Эти регистры сохраняются микропроцессором автоматически. Сохранение остальных регистров - должно обеспечиваться программистом!!! Наиболее удобным местом хранения регистров является стек. После сохранения регистров в стеке микропроцессор сбрасывает бит флага IF (т.е.=0) (!!! В стеке при этом записан регистр flags с еще установленным IF!!!) Этим предотвращается возможность возникновения вложенных внешних прерываний и порча регистров исходной программы вследствие неконтролируемых действий со стороны программы - обработчика вложенного прерывания. После того как необходимые действия по сохранению контекста завершены, обработчик аппаратного прерывания может разрешить вложенные прерывания командой sti. 2. Переход к выполнению и выполнение программы обработки прерывания. Здесь определяется источник прерывания и вызывается соответствующий обработчик прерывания. В реальном режиме микропроцессора допускается 256 источников - по кол-ву элементов таблицы векторов прерываний. Структура элемента: 2 байта - значение смещения начала программы-обработчика прерывания от начала кодового сегмента; 2 байта - значение базового адреса сегмента, в котором находится программа-обработчик. Как определить адрес, по которому находится вектор прерывания с номером N? - смещение эл-та таблицы векторов прерываний = N * 4 Полный размер таблицы = 4*256=1024 Итак, на втором этапе микропроцессор: 1) по номеру источника прерывания определяет смещение в таблице векторов прерываний. 2) помещает первые два байта в регистр IP; 3) помещает вторые два байта в регистр CS; 4) передает управление по адресу CS:IP; Далее выполняется сама программа обработки прерывания (она тоже может быть прервана поступлением запроса от более приоритетного источника; все источники прерывания имеют приоритеты.)
3. Возврат управления прерванной программе. Необходимо привести стек в состояние, в котором он был сразу после передачи управления данной процедуре. Для этого программист должен указать необходимые действия по восстановлению регистров и очистке стека. Этот участок необходимо защитить от возможного искажения содержимого регистров (в результате появления аппаратного прерывания) с помощью команды cli. Последние команды в обработчике прерывания - sti, iret sti - разрешить аппаратные прерывания (устанавливает флаг IF=1, не имеет операндов); iret - извлечь последовательно три слова из стека и поместить их соответственно в регистры ip, cs, flags.
Аппаратные прерывания могут быть инициированы программно командой микропроцессора: int n; где n - номер аппаратного прерывания в соответствии с таблицей векторов прерываний. Обработка машинной команды int n - это программное прерывание. С помощью программных прерываний программист может обратиться в нужное для него время за обслуживанием своих запросов либо к ОС, либо к BIOS, либо к собственным обработчикам прерываний.
Дата добавления: 2014-01-06; Просмотров: 375; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |