|
|
В процессоре i486
предусмотрены два механизма прерывания выполнения программы:
1. Исключения -
это синхронные события, которые являются ответами процессора на возникновение
некоторой ситуации во время выполнения команды.
2. Прерывание -
это асинхронные события, обычно активизируемые сигналом от внешнего по
отношению к процессору устройства, нуждающегося в обслуживании.
Прерывания и
исключения сходны по действию: они заставляют процессор временно приостановить
выполнение программы для запуска программы с более высоким приоритетом. Оcновное отличие между этими двумя
видами прерываний заключается в их происхождении. Исключение всегда может быть
воспроизведено при помощи перезапуска программы, вызвавшей данное исключение, в
то время как прерывание может иметь более сложную, зависимую от времени связь с
программой.
Как правило,
прикладные программисты не вмешиваются в работу прерываний и исключений: их
обрабатывают операционная система, монитор или драйверы устройств. Более полная
информация для прикладных программистов о прерываниях содержится в Главе 9.
Однако, некоторые типы исключений полезны для
прикладных программистов и многие операционные системы дают прикладным
программистам возможность обслуживать эти исключения самостоятельно. При этом
операционная система определяет интерфейс между прикладной программой и
механизмом исключений процессор i486. В Таблице 10 приведен список прерываний и
исключений.
Таблица 10 Исключения и прерывания

-
Исключение ошибки деления имеет место при выполнении операций DIV или IDIV,
если делитель равен нулю или частное слишком велико для операнда-приемника. (
См. Главу 3 для получения более полной информации о командах DIV и IDIV.)
- Исключение для
отладки может передавать управление обратно в прикладную программу, если оно
произошло в результате установки флага TF (флага ловушки).
- Исключение
останова вызывается командой INT3. Данная команда используется некоторыми
отладчиками для остановки выполнения программы в определенной точке.
- Исключение
переполнения запускается в том случае, если процессор выполняет команду INTO и
при этом флаг переполнения (OF) установлен. См. Главу 3 для ознакомления с
командой INTO.
- Исключение
нарушения границы возникает при исполнении команды BOUND, если индекс массива
оказывается больше, чем значение границы массива.
- Исключение
отсутствия устройства возникает, если процессор обнаруживает команду ESC и флаг
TS (переключение задачи) или EM (присутствие сопроцессора) в управляющем
регистре CR0 установлены.
- Исключение
проверки выравнивания адреса генерируется для невыравненых
операндов в памяти в пользовательском модуле ( 3
уровень привилегированности ), обеспечивается одновременной установкой AM и AC.
Для операндов в памяти в режиме супервизора ( 0, 1 и 2
уровень привилегированности ), или для операндов в памяти, принятых по
умолчанию для режима супервизора, исключение не генерируется.
При выполнении
команды INT всегда генерируется прерывание: процессор рассматривает это
прерывание как исключение. При этом (как и для всех остальных исключений)
вызывается определенная в прикладной программе или в операционной системе
подпрограмма обработки исключения.
Исключения, возникшие при сегментации и подкачке
страниц обрабатываются несколько
иным способом, нежели прерывания. Обычно, при возникновении исключения или
прерывания, содержимое счетчика команд (регистр EIP) сохраняется в стеке. При
обработке исключения, возникшего при сегментации или подкачке, сначала
восстанавливается содержимое всех регистров процессора в том состояние, которое
было перед началом интерпретации команды, вызвавшей исключение. Только после
этого сохраняется содержимое счетчика команд, который в этом случае указывает
на данную команду, а не на следующую. Это позволяет операционной системе
обработать исключение и перезапустить вызвавшую его программу. Данный механизм
обработки исключений при сегментации и подкачке полностью "прозрачен"
для прикладной программы.
|
|