7.5.2.6. Прерывания и исключения

В процессоре 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) сохраняется в стеке. При обработке исключения, возникшего при сегментации или подкачке, сначала восстанавливается содержимое всех регистров процессора в том состояние, которое было перед началом интерпретации команды, вызвавшей исключение. Только после этого сохраняется содержимое счетчика команд, который в этом случае указывает на данную команду, а не на следующую. Это позволяет операционной системе обработать исключение и перезапустить вызвавшую его программу. Данный механизм обработки исключений при сегментации и подкачке полностью "прозрачен" для прикладной программы.

 

 

 

 

HotLog

Заказчику web дизайна и программирования - каталог сайтов, обзор дизайн студий