7.3.6. Прерывания и исключения
Как
и 8086/88, процессор 80286 может обслуживать до 256 типов прерываний.
Прерывания подразделяются на аппаратные (маскируемые и немаскируемые),
вызываемые электрическими сигналами на входах процессора, программные,
выполняемые по инструкции INT хх, и исключения инструкций. Аппаратные и
программные прерывания работают так же, как и в 8086.
Исключения
инструкций (Instruction Exceptions), или просто исключения, случаются прет
появлении особых условий при выполнении операций (в 8086 аналогом исключений
являлись внутренние прерывания процессора). В отличие от прерываний после
обработки исключений (кроме исключения 9, относящегося к сопроцессору)
управление возвращается снова к той же инструкции (включая все префиксы),
которая вызвала исключение. Набор и обработка исключений реального и
защищенного режимов различны. Под исключения Intel резервирует векторы 0-31 в
таблице прерываний, однако в PC часть из них перекрывается системными
прерываниями BIOS и DOS.
Процедура,
обслуживающая прерывание или исключение, определяется по таблице с помощью
номера — восьмибитного указателя (вектора) прерывания. Указатель для
программных прерываний задается командой, для маскируемых аппаратных прерываний
вводится от внешнего контроллера во втором цикле INTA#, немаскируемое
прерывание имеет фиксированный вектор, а исключения генерируют и передают
вектор внутри процессора.
Каждому
номеру прерывания соответствует элемент в таблице дескрипторов прерываний IDT
(Interrupt Descriptor Table). В реальном режиме таблица прерываний организована
так же, как у 8086/88, — она содержит двойные слова (дальние адреса)
обслуживающих процедур и после сброса располагается, начиная с нулевых адресов.
Однако командой LJDT можно изменять ее положение \ после сброса — 00000h) в
пределах первого мегабайта, а размер (03FFh) может быть уменьшен до 007Fh. При
попытке обслуживания прерывания с номером, выходящим за заданный размер таблицы,
генерируется исключение типа 8. В защищенном режиме таблица IDT содержит
8-байтные дескрипторы прерываний, может иметь размер от 32 до 256 дескрипторов
и располагаться в любом месте физической памяти.
Двойной
отказ (Double Fault) — ситуация, когда процессор обнаруживает ива независимых
исключения при отработке одной инструкции. В этом случае исполняется исключение
8. Если во время его обслуживания произойдет какое-либо исключение, происходит
отключение (Shutdown) процессора. Во время отключения никакие новые инструкции
не выполняются. Из этого состояния процессор можно вывести только аппаратно
сигналом NMI (оставляя его в защищенном режиме) или RESET, который переведет
процессор в реальный режим.