Исключения сопроцессора и их обработка
Важной особенностью сопроцессора является возможность распознавания особых ситуаций,которые могут возникать в процессе вычислений.При этом сопроцес- сор формирует определенные управляющие сигналы и устанавливает бит в своем регистре состояния 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 говорит о том,что в команде встретился неверный операнд. Маскированная реакция на исключение недействительной операции зависит от причины ошибки.Если она возникла в результате некорректной работы стека, то сопроцессор перезаписывает содержимое того регистра стека,обращение к ко-
торому вызвало исключение.При перезаписи в него заносится специальное чис- ленное значение — сцокойное нечисло.Если ошибка возникла в результате недо- пустимого операнда ] то в большинстве ситуаций в регистре стека сопроцессора возвращается также ^покойное нечисло. Кстати,исключен ие недействительной операции — это единственное исключе- ние,которое не нужно маскировать.Программисту следует самому вмешиваться в обработку ошибочных ситуаций путем вызова соответствующего обработчика. Деление на ноль Исключение деления на ноль возникает в командах,которые явно или неявно вы- полняют деление.Э ния сопроцессора 5 управления CWR.ME о команда FDIV и ее варианты — FYL2X и FXTRACT.Факт возник- новения этого исключения фиксируется флагом ZE (Zero Divide)регистра состоя- WR и при необходимости маскируется битом ZM регистра скированная реакция сопроцессора заключается в формиро- вании результата в ^иде знаковой бесконечности. j Денормализация операнда Исключение денор ^ализованного операнда возникает,когда команда пытается выполнить операциЬ с денормализованным операндом.При этом устанавливает- ся флаг DE (Denorma|lized Operand),который маскируется битом DM регистра управ- ления CWR.Если это исключение замаскировано,то его возникновение приводит только к установке [флага DE,после чего сопроцессор нормализует операнд и вы- числительный процесс продолжается.Если исключение денормализованного опе- ранда не замаскировано,то вызывается обработчик исключения,который позво- ляет произвести нефбходимую обработку ситуации. Переполнение и антипереполнение Ситуации переполнения и антипереполнения возникают в случаях,когда порядок результата слишком велик или слишком мал для формата приемника.При воз- никновении этих исключений в регистре SWR устанавливаются флаги ОЕ (Overflow) HUE (Underflow).Эти исключения маскируются битами ОМ и UM регистра управ- ления CWR.Исключения могут возникнуть при работе арифметических команд и ко- манд,преобразующих формат операндов,таких как FST. Маскированная реакция для ситуации переполнения состоит в формировании граничных (максимальных или минимальных)значений,представимых в сопро- цессоре,или специального численного значения в виде знаковой бесконечности.
Немаскированная реакция на возникновение этих исключений зависит от того, где должен формироваться результат.Если приемник — память,то мантисса ре- зультата округляется,а порядок приводится к середине своего диапазона.Если приемник — ячейка памяти,то значение в ней не запоминается,при этом не изме- няется и содержимое регистра стека. Неточный результат Исключение неточного результата возникает в случае,когда результат работы ко- манды нельзя точно представить в формате приемника и его приходится округ- лять.Например,вычисление любой периодической дроби вроде 1/3 будет приво- дить к возникновению такого типа исключения.В какую сторону произошло округление,можно судить по значению бита С1: II если С1 =0,то результат был усечен; ш если С1 =1,то результат был округлен в большую сторону. При возникновении этих исключений в регистре SWR устанавливаются флаг РЕ (Precision).Исключение маскируется битом РМ регистра управления CWR.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|