Исключения сопроцессора и их обработка
Важной особенностью сопроцессора является возможность распознавания особых
ситуаций,которые могут возникать в процессе вычислений.При этом сопроцес-
сор формирует определенные управляющие сигналы и устанавливает бит в своем
регистре состояния SWR.Согласно идеологии IA-32,прерывания классифициру-
ются по источникам возникновения.Один из возможных типов прерываний —
исключения,которые являются внутренними прерываниями процессора,возника-
ющими в ходе вычислительного процесса.Особые ситуации,возникающие в со-
процессоре,полностью соответствуют определению понятия «исключение ».
В сопроцессоре могут возникать шесть типов исключений.Все они были пере-
числены при обсуждении форматов регистра состояния SWR и регистра управле-
ния CWR.Вспомним основные моменты.В регистре состояния SWR 6 битов,каждый
из которых играет роль флага для определенного типа исключения.При возник-
новении исключения устанавливается соответствующий флаг в этом регистре (см.
рис.17.2).Сопроцессор аппаратно позволяет запретить явную обработку любого
из этих типов исключений.Для этого в регистре управления CWR есть 6 битов,игра-
ющих роль масок,установка которых и позволяет запретить возникновение соот-
ветствующих исключений.Важно отметить,что запрещение обработки исключе-
ния вовсе не означает того,что сопроцессор оставляет вычислительную ситуацию
неизменной.При возникновении исключения,имеющего единичное состояние
соответствующего бита в регистре CWR,сопроцессор выполняет так называемую
маскированную реакцию,которая включает в себя некоторую последовательность
предопределенных разработчиками процессора действий.Естественно,что в них
невозможно было предусмотреть все потребности программистов,которым,по-
мимо всего прочего,могут понадобиться и нестандартные варианты реакции на
исключения.В этом случае программисту необходимо установить соответствую-
щий бит в регистре CWR.О том,как нужно реагировать на возникновение незамас-
кированного исключения,мы поговорим чуть позже,а пока же разберемся с при-
чинами возникновения исключений и маскированными реакциями на них со
стороны сопроцессора.Эта информация может быть полезна для того,чтобы ра-
зобраться с логическими ошибками программы и правильно запрограммировать
реакцию на их возникновение.Недействительная операция
Причиной исключения недействительной операции являются ошибки в логике
программы,наиболее!типичные из которых следующие:
-загрузка операнда|в непустой регистр стека сопроцессора;
попытка извлечения операнда из пустого регистра стека сопроцессора;
использование операнда с недопустимым для данной операции значением.
При возникновении этого исключения устанавливается флаг IE (Invalid Opera-
tion)в регистре SWR (см.рис.17.2),маскируется оно битом IM регистра управления
сключение недействительной операции возникает при рабо-
крметических вычислениях.В каких именно операциях воз-
е,судят по содержимому бита SF (Stack Fault — ошибка сте-
CWR (см.рис.17.4).И
те со стеком и при ар:
никло это исключеш
ка)регистра состояния SWR.Если он установлен в единицу,это говорит о том,что
исключение было вызвано ошибкой в работе стека сопроцессора;напротив,ну-
левое состояние би-fa SF говорит о том,что в команде встретился неверный
операнд.
Маскированная реакция на исключение недействительной операции зависит
от причины ошибки.Если она возникла в результате некорректной работы стека,
то сопроцессор перезаписывает содержимое того регистра стека,обращение к ко-
торому вызвало исключение.При перезаписи в него заносится специальное чис-
ленное значение — сцокойное нечисло.Если ошибка возникла в результате недо-
пустимого операнда ] то в большинстве ситуаций в регистре стека сопроцессора
возвращается также ^покойное нечисло.
Кстати,исключен ие недействительной операции — это единственное исключе-
ние,которое не нужно маскировать.Программисту следует самому вмешиваться
в обработку ошибочных ситуаций путем вызова соответствующего обработчика.
Дата добавления: 2015-04-15; просмотров: 998;