75
прерываний, то процессору пришлось бы самому периодически проверять, не
требует ли какое-либо устройство обслуживания (в микропроцессорной
технике это называется «режим опроса»).
Прерывания могут поступить от внешних устройств, они могут быть
инициированы специальными командами или самим микропроцессором.
Итак, прерывания – это вызываемый определённым образом процесс,
переключающий МП на выполнение другой программы с последующим
возвратом к прерванной программе. Прерываний в МПС на базе I8086/88 256
типов (0…255). Они делятся на внешние аппаратные, внутренние аппаратные
и программные. Любые прерывания требуют новых адресов подпрограмм
прерываний, которые выбираются из таблицы векторов. Каждый вектор
представляет собой два 16-разрядных слова, расположенных в соседних
ячейках памяти, причём в ячейке с меньшим адресом (чётным) содержится
смещение в кодовом сегменте (новое значение IP), а в ячейке с большим
адресом новое значение базового адреса кодового сегмента (значение CS).
Под векторы (указатели) прерываний в общем пространстве адресов памяти
зарезервирована область 0-3FFh.
Внешние аппаратные прерывания вызываются внешними по
отношению к МП событиями, возникающими асинхронно по отношению к
исполняемой программе. Процессор может воспринимать прерывания после
выполнения каждой команды, длинные строковые команды имеют для этого
специальные окна. Аппаратные прерывания подразделяются на маскируемые
и немаскируемые. Для этого у процессора есть два входа: INTR (Interrupt
Requist) и NMI (Non Mascable Interrupt). Маскируемые прерывания
вызываются переходом в единицу сигнала на входе INTR и выполняются при
установленном флаге разрешения прерываний (IF=1). Управление флагом IF
производят команды CLI – сброс флага IF =0 и STI – установка флага
IF=1(однобайтные команды, выполняемые за два такта) (рис. 2.11). В случае
перехода к подпрограмме процессор сохраняет в стеке адрес возврата в
основную программу (содержимое CS и IP), регистр флагов, сбрасывает
флаг IF и вырабатывает два следующих друг за другом цикла подтверждения
прерываний, в которых генерируются два соответствующих сигнала INTA
(Interrupt Acknolidge). Высокой уровень сигнала на входе INTR должен
сохраняться по крайней мере до появления сигнала INTA. Первый цикл
подтверждения прерываний и сигнал INTA холостой, предупреждающий ВУ
о принятии запроса и необходимости подготовки номера вектора. По
второму сигналу INTA, служащему сигналом чтения в этом цикле,
происходит считывание по шине данных байта, содержащего номер вектора,
соответствующего данному типу аппаратного прерывания. Полученный
номер вектора умножается в процессоре на 4, это значение помещается в
регистр IP. Тем самым определяется точка входа в таблицу векторов, откуда
считывается адрес подпрограммы, соответствующий полученному запросу.