Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
прерывания.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
353.28 Кб
Скачать

4.2. Действия микропроцессора при возникновении прерывания в ibm pc

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

1. Регистр флагов запоминается в стеке. Запоминание состояния прерванной программы.

2. Отчистка флагов TF и IF.

Т.о. после программы обработки прерывания процессор работает обычным образом (Т = 0), а не в пошаговом режиме. Автоматически запрещаются внешние прерывания по входу INTR (I = 0), что нужно, например, для защиты начального участка программы обработки прерывания, в течение которого осуществляется включение в стек внутренних регистров микропроцессора. Затем программа обработки прерывания может разрешить внешние прерывания. Необходимо следить, чтобы в программе обработке прерывания не возникло того типа прерывания, которое она обслуживает, чтобы не произошел бесконечный вызов этой процедуры.

3. Адрес возврата (CS и IP) заполняются в стеке. Отметим, что в стек включается скорректированное содержимое указателя команд IP, соответствующее адресу команды, перед которой микропроцессор начал обслуживать прерывание(то есть адрес следующей команды)..

4. Вектор прерывания помещается в регистры CS и IP. При этом осуществляется переход к программе обработки прерывания.

После этого по номеру ВП N, полученному от внешнего устройства или сгенерированному внутри ЦП, из ОП извлекается ВП. Адрес ВП формируется следующим образом: АВП = 4N. По нему из ОП извлекаются два слова адреса обработчика, которые загружаются в регистр CS (базовый адрес) и IP (смещение). По ним выбирается первая команда программы обработки прерывания. В конце программы-обработчика ставится команда iret – возврат из прерывания, по которой из стека выталкиваются 2 слова адреса возврата к прерванной программе и загружаются в CS и IP, и третье слово - в RF.

Обслуживание прерывания по входу NMI осуществляется без прерывания обработчика, т.е. по схеме с ОПР, т.к. сигнал запроса сбрасывается только после выполнения команды IRET.

На входе INTR сигналом запроса является сигнал высокого уровня. По этому сигналу арбитр заталкивает в стек IP, CS, RF и вырабатывает два ответных сигнала (импульса) INTA1, INTA2. Получив второй из них, программируемый контроллер прерываний ПКП сбрасывает сигнал на входе INTR и посылает по ШД в ЦП номер ВП, соответствующий причине прерывания с наивысшим в данный момент времени приоритетом (IRQi). По ВП запускается программа-обработчик, которая не может быть прервана (т.к. IF=0) до тех пор, пока сама не установит маску IF=1 (по команде STI). Отметим еще раз, что эта п/п может быть прервана сигналом прерывания на входе NMI, т.к. на него флаг IF не действует (АПР). Кроме того, эта п/п может быть прервана и некоторыми внутренними причинами прерывания – например, делением на 0.

Рекомендуемая структура программы-обработчика для IBM PC представлена на рисунке 14.15.

Как видно из пояснений, эти действия несколько отличаются от обработки прерываний в PDP-11, хотя, по существу, выполняются одни и те же этапы.

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

Взаимодействие программ, использующих прерывания представлено ниже.

Рисунок 14.16 – Взаимодействие программ, использующих прерывания

Здесь IRET – команда возврата из прерывания, по которой из стека считываются содержимое регистра флагов и регистров CS и IP, после чего продолжается выполнение прерванной программы.

Пример: Установить курсор на 4-ю строку в 10-й столбец.

MOV AH, 02; 02 - функция установки курсора

MOV BH, 00; экран 0

MOV DH, 03; строка 4

MOV DL, 09; столбец 10

INT 10H; передача управления в BIOS