
Немаскируемые прерывания.
Это внешние прерывания, поступающие в процессор по линии NMI. Обычно ими являются прерывания, сигнализирующие процессору о внешних событиях особой важности. Немаскируемые прерывания признаются процессором всегда, независимо от флага прерываний! Т.о., немаскируемые прерывания имеют более высокий приоритет по сравнению с маскируемыми. Им присвоен тип 2. Для выполнения требования немаскируемого прерывания CPU автоматически выполняет следующую последовательность действий:
содержимое регистра флагов записывается на вершину стека (по адресу SS:SP);
обнуляется флаг прерываний IF, что запрещает выполнение всех маскируемых прерываний;
обнуляется флаг ловушки TF, что делает невозможным пошаговый режим;
в стек загружается содержимое регистра CS;
в стек загружается содержимое регистра IP;
16-разрядное слово из ячейки с физическим адресом 00008h записывается в регистр IP;
16-разрядное слово из ячейки с физическим адресом 0000Ah записывается в регистр CS.
После выполнения операций 6 и 7 управление передается процедуре обслуживания прерывания, чтобы удовлетворить требование, поступившее по линии NMI.
Внутренние прерывания.
Эти прерывания обуславливаются прикладными программами, использующими команду INT. Они возникают также при некоторых условиях автоматически по сигналам в самом CPU, например, при ошибках деления, переполнении и т.п. Внутренние прерывания аналогичны маскируемым. Отличие заключается только в том, что CPU реагирует на запросы внутренних прерываний независимо от состояния флага прерываний IF.
Код типа внутреннего прерывания может быть задан аппаратно, либо представлен частью машинной команды.
Если тип прерывания кодируется командой, то оно называется программным прерыванием.
Программные прерывания используются для реализации возможностей, предоставляемых системным программным обеспечением BIOS I/O. (Например, команда INT 16h может быть использована для чтения символа из буфера клавишного пульта ПК.)
CPU автоматически прерывает работу при следующих ситуациях:
1. Прерывание из-за ошибки деления. CPU автоматически генерирует прерывание типа 0 немедленно вслед за операциями DIV (деление) или IDIV (целочисленное деление) при возникновении следующих условий:
деление на 0;
результат занимает больше 8-ми или 16-ти бит.
Адрес процедуры обслуживания прерывания типа 0 определяется ячейками памяти с физическими адресами с 00000h по 00003h.
2. Прерывание в точке. Используется в основном для отладки программы при ее написании или тестировании. CPU генерирует прерывание типа 3 немедленно по завершении выполнения команды INT 3 (CCH). Шестнадцатеричный машинный код CCh используется как команда прерывания в точке. Его можно вставить в любое место программы, где необходимо прервать нормальное выполнение и, с помощью процедуры обработки прерывания, отобразить критическую информацию, такую, как содержимое регистров CPU и ячеек памяти.
3. Пошаговое прерывание. Если флаг ловушки регистра флагов TF = 1, то сразу после выполнения текущей команды осуществляется пошаговое прерывание. Этому прерыванию присвоен тип 1, и служит оно для покомандного выполнения программы. Прерывание типа 1 происходит автоматически после выполнения каждой машинной команды.