Прерывания и исключения нарушают нормальный ход выполнения программы для обработки внешних сообщений или сообщения о возникновении особых условий или ошибок. Прерывания делятся на:
аппаратные - маскируемые и немаскируемые;
вызываемые электрическими сигналами на входах микропроцессора;
программные выполняемые по команде INT.
Программные прерывания микропроцессором обрабатываются как разновидность исключений. Аппаратные прерывания микропроцессор может воспринимать после выполнения каждой команды. Длинные строковые команды имеют для восприятия прерываний специальные окна. Маскируемые прерывания вызываются переходом в высокий уровень сигнала на входе INTR при установленном флаге IF. В этом случае микропроцессор сохраняет в стеке регистр флагов, сбрасывает флаг IF и вырабатывает два следующих друг за другом цикла подтверждения прерывания, в которых генерируются управляющие сигналы INTA. Высокий уровень INTR должен сохраняться по крайней мере до подтверждения прерывания.
Первый цикл подтверждения холостой по второму импульсу внешний контроллер прерываний передает по шине номер вектора обслуживающего данный тип аппаратного прерывания. Прерывания с полученным номером вектора выполняются микропроцессором так же, как и программным. Обработка текущего прерывания может быть в свою очередь прервана немаскируемым прерыванием, а если обработчик установит флаг IF то и другим маскируемым аппаратным прерываниям.
Немаскируемые прерывания выполняются независимо от состояния флага IF по сигналу NMI. Высокий уровень на этом входе вызовет прерывание с вектором 2 который выполняется так же, как и маскируемые. Его обработка не может прерываться под действием сигнала на входе NMI до выполнения команды IRET.
Исключения делятся на отказы, ловушки и аварийные завершения.
Отказ - это исключение, которое обнаруживается и обслуживается до выполнения инструкции вызывающей ошибку. После обслуживания этого исключения управление возвращается на ту же инструкцию, включая все префиксы, которая вызвала отказ.
Ловушка - это исключение, которое обнаруживается и обслуживается после выполнения инструкции его вызывающей. После обслуживания этого исключения управление возвращается на инструкцию, следующую за вызвавшей ловушку. К классу ловушек относятся и программные прерывания.
Аварийное завершение - это исключение, которое не позволяет точно установить инструкцию его вызывающую. Оно используется для сообщения о серьезной ошибки такой как аппаратная ошибка или повреждение системных таблиц. Набор и обработка исключений реального и защищенного режимов различны. Под исключения зарезервированы векторы 0?31 в таблице прерываний. Однако в РС часть из них перекрывается системами прерываний BIOS и DOS. Процедура, обслуживающая прерывания и исключения определяется по таблице с помощью номера 8 битного указателя прерывания. Указатель для программных прерываний задается командой. Для маскируемых вводится от внешнего контроллера во втором цикле INTA. Немаскируемый имеет фиксированный вектор, а исключения генерируют и передают вектор внутри микропроцессора. Каждому номеру от 0 до 255 соответствует элемент в таблице дескрипторов прерываний, в реальном режиме таблица прерываний содержит двойные слова -дальние адреса обслуживающих процедур. И после сброса располагаются, начиная с нулевых адресов командой LIDT можно изменять ее положение в пределах первого Мбайта. А размер ее может быть уменьшен до 007F. При попытке обслуживания прерывания с номером, выходящим за заданные параметры таблицы, генерируется исключение типа 8. В защищенном режиме IDT содержит 8 байтные дескрипторы прерываний, может иметь размер от 32 до 256 дескрипторов и располагается в любом месте физической памяти. Анализ условия обслуживания прерываний и исключений выполняется в следующем порядке (по убыванию приоритета):
проверка на исключение (ловушка) отладки (типа 1) по выполненной инструкции (пошаговый режим через флаг TF или точка останова по данным через регистр отладки);
проверка на исключение (отказ) отладки (типа 1) по следующей инструкции (точа останова по инструкции через регистр отладки);
немаскируемые прерывания;
маскируемые прерывания;
проверка на исключения (отказ) сегментации (типа 11 или 13) при выборе следующей инструкции;
проверка на исключение (отказ) страницы (типа 14) при выборке следующей инструкции;
проверка на отказ (декодирование) следующей инструкции (типа 6 или 13);
для операции WAIT проверка TS и MP (исключение 7, если они в единице);
для операции ESCAPE (к математическому сопроцессору) проверка EM и TS (исключение 7, если они в единице);
для операции WAIT или ESCAPE проверка на исключение 16 от сопроцессора;
проверка на отказ сегментации (исключения 11, 12, 13) и страницы (исключения 14) для операндов используемых в инструкции.
Двойной отказ - это исключение 8 возникает, когда при обработке исключения связанного с сегментацией (типа 10?13) микропроцессор обнаруживает исключения отличные от отказа страницы (типа 14). Также двойной отказ возникает, если при отработке исключения отказа страницы (типа 14) обнаруживается исключения другого типа, в этом случае тоже выполняется исключение 8. Если во время обслуживания исключения отказа страницы произойдет еще один отказ страницы, то происходит отключение микропроцессора. Во время отключения никакие новые инструкции не выполняются. Из этого состояния микропроцессор можно вывести только аппаратным сигналом NMI, оставляя его в защищенном режиме или сигналом RESET переводящим процессор в реальный режим. При отработке исключений в защищенном режиме микропроцессор сохраняет в стеке слово, когда ошибки, если оно отлично от нуля то оно содержит селектор дескриптора, с которым связана ошибка.