В процессоре i486 предусмотрены два механизма прерывания выполнения программы:
Исключения - это синхронные события, которые являются ответами процессора на возникновение некоторой ситуации во время выполнения команды.
Прерывание - это асинхронные события, обычно активизируемые сигналом от внешнего по отношению к процессору устройства, нуждающегося в обслуживании.
Прерывания и исключения сходны по действию: они заставляют процессор временно приостановить выполнение программы для запуска программы с более высоким приоритетом. Оcновное отличие между этими двумя видами прерываний заключается в их происхождении. Исключение всегда может быть воспроизведено при помощи перезапуска программы, вызвавшей данное исключение, в то время как прерывание может иметь более сложную, зависимую от времени связь с программой. Как правило, прикладные программисты не вмешиваются в работу прерываний и исключений: их обрабатывают операционная система, монитор или драйверы устройств. Более полная информация для прикладных программистов о прерываниях содержится в Главе 9. Однако, некоторые типы исключений полезны для прикладных программистов и многие операционные системы дают прикладным программистам возможность обслуживать эти исключения самостоятельно. При этом операционная система определяет интерфейс между прикладной программой и механизмом исключений процессор i486. В Таблице 2-4 приведен список прерываний и исключений.
+--------------------------------------------------------------+| Номер вектора | Описание |+---------------+----------------------------------------------|| 0 | Ошибка даления || 1 | Вызов отладчика || 2 | Немаскируемое прерывание || 3 | Точка останова || 4 | Переполнение при выполнении команды INTO || 5 | Превышение границы индекса массива || 6 | Неразрешенный код операции || 7 | Недоступное устройство || 8 | Двойной отказ || 9 | ( Зарезервирован Intel(R). Не должен || | использоваться. Для i486 не используется ) || 10 | Неразрешенный сегмент состояния задачи || 11 | Сегмент отсутствует || 12 | Исключение по стеку || 13 | Общая защита || 14 | Отказ страницы || 15 | ( Зарезервирован Intel(R). || | Не должен использоваться ) || 16 | Ошибка вещественных вычислений || 17 | Проверка выравнивания адреса || 18 - 31 | ( Зарезервирован Intel(R). || | Не должен использоваться ) || 32 - 255 | Маскируемые прерывания |+--------------------------------------------------------------+ Таблица 2-4 Исключения и прерывания
Исключение ошибки деления имеет место при выполнении операций DIV или IDIV, если делитель равен нулю или частное слишком велико для операнда-приемника. ( См. Главу 3 для получения более полной информации о командах DIV и IDIV.)
Исключение для отладки может передовать управление обратно в прикладную программу, если оно произошло в результате установки флага TF (флага ловушки).
Исключение останова вызывается командой INT3. Данная команда используется некоторыми отладчиками для остановки выполнения программы в определенной точке.
Исключение переполнения запускается в том случае, если процессор выполняет команду INTO и при этом флаг переполнения (OF) установлен. См. Главу 3 для ознакомления с командой INTO.
Исключение нарушения границы возникает при исполнении команды BOUND, если индекс массива оказывается больше, чем значение границы массива. См. Главу 3 для ознакомления с командой BOUND.
Исключение отсутствия устройства возникает, если процессор обнаруживает команду ESC и флаг TS (переключение задачи) или EM (присутствие сопроцессора) в управляющем регистре CR0 установлены.
Исключение проверки выравнивания адреса генерируется для невыравненых операндов в памяти в пользовательском модуле ( 3 уровень привилегированности ), обеспечивается одновременной установкой AM и AC. Для операндов в памяти в режиме супервизора ( 0, 1 и 2 уровень привилегированности ), или для операндов в памяти, принятых по умолчанию для режима супервизора, исключение не генерируется.
При выполнении команды INT всегда генерируется прерывание: процессор рассматривает это прирывание как исключение. При этом (как и для всех остальных исключений) вызывается определенная в прикладной программе или в операционной системе подпрограмма обработки исключения. Сама команда INT подробно обсуждается в Главе 3, а для получения более полной информации об исключениях, необходимо обратиться к Главе 9. Исключения, возникшие при сегментации и подкачке страниц обрабатываются несколько иным способом, нежели прерывания. Обычно, при возникновении исключения или прерывания, содержимое счетчика команд (регистр EIP) сохраняется в стеке. При обработке исключения, возникшего при сегментации или подкачке, сначало восстанавливается содержимое всех регистров процессора в том состояние, которое было перед началом интерпретации команды, вызвавшей исключение. Только после этого сохраняется содержимое счетчика команд, который в этом случае указывает на данную команду, а не на следующую. Это позволяет операционной системе обработать исключение и перезапустить вызвавшую его программу. Данный механизм обработки исключений при сегментации и подкачке полностью "прозрачен" для прикладной программы.