Организация прерываний.
Прерывания - приостановление основных вычислений в процессоре, для выполнения вспомогательных действий, технологических сервисных процедур – можно разделить на два класса: внешние и внутренние. Каждому прерыванию назначен четырехбайтный вектор с номером в диапазоне 0h - FFh. Векторы определяют адреса подпрограмм обслуживания прерывания (ISR, Interrupt Service Routine) и размещаются в младшем килобайте адресного пространства памяти в виде IP:CS (сегмент_ISR:смещение_ISR, смещение записывается по младшему адресу).
Внешние прерывания вызываются сигналами на входах (см. рис. 9) запроса немаскируемого прерывания процессора (NMI) и маскируемого прерывания (INTR). Маскируемые прерывания игнорируются, если очищен флаг I.
Рисунок 9. Источники прерываний.
После завершения выполнения текущей команды процессор вырабатывает сигналы подтверждения (INTA), получает по шине данных номер прерывания от контроллера прерываний, сохраняет в стеке текущее содержимое Flags, CS, IP и приступает к выполнению ISR, загружая содержимое вектора в CS, IP. В начале выполнения ISR процессор очищает флаг I, запрещая дальнейшие прерывания. Если необходимо, в подпрограмме ISR можно разрешить дальнейшие прерывания, установив флаг I (с помощью команды STI). Подпрограмма ISR должна заканчиваться командой IRET, которая загружает старые значения IP, CS, Flags из стека и т.о. возобновляет работу прерванной программы.
Запросы от различных устройств в ПК обрабатываются контроллером прерываний, который формирует сигнал INTR для процессора (рис. 9). Обычно это две микросхемы Intel8259, каждая из которых имеет 8 входов прерываний. Запросам прерываний IRQ0-IRQ7 ПК соответствуют векторы от 08h до 0Fh, а IRQ8-IRQ15 – векторы от 070h до 077h. Битовые маски, позволяющие запрещать (маскировать) отдельные входы запросов прерываний, находятся по адресам 021h и 0A1h для IRQ0-IRQ7 и IRQ8-IRQ15 соответственно.
К внутренним прерываниям относятся т.н. исключения – различного рода ошибки, механизм для отлаживания программ, аварийные состояния и командные прерывания INT:
- вектор 0 – возникает при ошибке деления;
- вектор 1 – отладочное, возникает при установленном TF;
- вектор 3 – вызывается однобайтной командой int 3;
- вектор 4 – вызывается однобайтной командой into, при установленном OF;
- вектор > 4 – вызывается командой int n, где n – номер вектора.
Вход для немаскируемых прерываний с вектором 2 используется для подачи сигналов о серьезных аварийных состояниях, требующих немедленного обслуживания, например, об отсутствии напряжения в сети.
Дата добавления: 2021-06-28; просмотров: 294;