Маскируемые прерывания
Сигнал о запросе маскируемого прерывания поступает в микропроцессор по линии INT.
Выполнение текущей инструкции завершается обычным образом. В стеке будет сохранён адрес следующей инструкции.
Маскируемые прерывания могут быть запрещены средствами самого микропроцессора – для этого в регистре флагов должен быть сброшен флажок IF. В таком случае микропроцессор игнорирует сигнал на линии INT и продолжает выполнять инструкции в обычном порядке. Однако когда этот флажок установлен и поступает запрос маскируемого прерывания, микропроцессор завершает обычным образом выполнение текущей инструкции, после чего передаёт управление обработчику прерывания.
В отличие от немаскируемых прерываний, маскируемым не назначается какой-либо фиксированный вектор прерывания. Вместо этого микропроцессор, начиная процедуру выполнения маскируемого прерывания, выдаёт сигнал INTA, получив который, устройство, запросившее прерывание, выдаёт микропроцессору один байт информации, являющийся номером вектора прерывания, которое должно быть выполнено. Таким образом, для обработки маскируемых прерываний может использовать несколько (до 256) векторов.
Как правило, внешние устройства не выдают запросы прерываний напрямую микропроцессору, а передают их специальной микросхеме – контроллеру прерываний, который способен обслуживать запросы прерываний от нескольких устройств сразу и обеспечивает выдачу соответствующих векторов в микропроцессор. В первых персональных компьютерах использовалась одна микросхема типа 8259 (КР580ВН59 или КР1810ВН59А), обеспечивающая восемь векторов прерываний. В дальнейшем (начиная с машин серии IBM PC/AT) стали устанавливать две таких микросхемы, соединённых каскадно и обеспечивающих 15 прерываний. В современных компьютерах функции контроллера наряду со многими другими прерываний выполняют совершенно иные микросхемы, однако они эмулируют необходимые функции вышеназванных кристаллов. Тем не менее, сам микропроцессор не “навязывает” проектировщику аппаратуры обязанность использования отдельного контроллера прерывания. Можно, например, построить систему, где каждое устройство будет самостоятельно выдавать определённый для него вектор прерывания (правда, при этом придётся решить вопрос арбитража прерываний, т.е. найти способ определить, какое прерывание из нескольких, возникших одновременно, должно произойти).