Организация прерываний в процессоре Intel 80×86

Опубликовано февраля 11, 2018 в Архитектура процессора Intel

Запросы внешних прерываний поступают на один из двух входов:

  1. NMI (NonMiscible Interrupt — вход немаскированного прерывания).
  2. INTR (Interrupt Requester — запрос прерываний — вход маскируемого прерывания).

Запросы прерывания, поступающие на вход NMI, принимаются к обслуживанию независимо от состояния флага IF. Эти запросы используются для прерывания работы ЦП при различных событиях, требующих его немедленной реакции со стороны ЦП. В различных моделях ПК вход NMI может быть связан с разными источниками прерываний, основными из которых являются следующие:

  • отказ питания (снижение уровня питающего напряжения до некоторого предела);
  • ошибка памяти (например, при выборке информации из памяти нарушается контроль по четности/нечетности);
  • сигнал от таймера и т.п.

Организация прерываний в процессоре Intel 80x86

На вход INTR поступают запросы прерываний от периферийных (внешних) устройств (клавиатура, монитор, принтер и т.п.). Вход INTR связан с микросхемой PIC. При каскадном включении PIC он связан с ведущим контроллером прерываний. Запросы, поступившие на вход INTR, маскируются (разрешаются или запрещаются) с помощью флага IF (IF=1 — запрос разрешен (принимается к обслуживанию), IF=0 — запрос маскируется (не принимается к обслуживанию)).

Контроллер прерываний выполняет следующие функции:

  1. Фиксирует запросы, поступающие от подключенных к нему ВУ в специальном регистре запросов.
  2. Осуществляет маскирование этих запросов с помощью специального регистра-маски.
  3. Выделяет наиболее приоритетный запрос из всех поступивших и незамаскированных запросов.
  4. Передает процессору сигнал о наличии хотя бы одного незамаскированного запроса по линии INT (PIC) ->INTR (CPU).
  5. В цикле подтверждения прерываний, инициируемом CPU, выставляет на шину данных код (номер) запроса, который принимается в ЦП и модифицируется в адрес вектора прерываний.

К зарезервированным типам программных прерываний относятся:

Тип 0 — ошибка деления, имеет место при выполнении команд DIV/IDIV в тех случаях, когда делитель равен ну лю или частное как результат операции не помещается в формат делителя. Эта ситуация распознается на начальных шагах алгоритма деления.

Тип 1 — пошаговое прерывание (прерывание по отладке или ловушка) по флагу TF, значение флага TF проверяется после завершения очередной команды.

Тип 2 — внешние прерывания, запросы которого поступают на вход NMI (сбой питания).

Тип 3 — прерывания по однобайтной команде INT. Однобайтную команду' INT обычно используют для нестандартной отладки в селективных точках программы. В отличие от пошагового режима отладочные прерывания реализуются в необходимых местах программы.

Тин 4 — прерывание по переполнению, это прерывание генерируется при выполнении команды INTO. Команда INTO, как правило, вставляется пользователем для реализации проверки возможного переполнения при выполнении операций знакового сложения и вычитания. Выполнение самой команды INTO предполагает проверку состояния флага OF и при его установке вызов прерывания стандартного типа 4. 1 [ри сброшенном флаге OF реализуется переход к следующей команде программы.

Для задания типа программного прерывания используется двухбайтная команда INT, в которой второй (младший) байт и задает номер вызываемого прерывания. С помощью этой команды, как правило, осуществляется вызов стандартных функций DOS, BIOS.