[Назад] [Далее]

2.4.3. Исключения FPU

При выполнении команд FPU могут возникать шесть типов особых ситуаций, называемых исключениями. При возникновении исключения соответствующий флаг в регистре SR устанавливается в 1 и, если маска этого исключения в регистре CR не установлена, вызывается обычное прерывание INT 10h (если бит NE в регистре центрального процессора CR0 установлен в 1) или IRQ13 (INT 75h), обработчик которого может прочитать регистр SR, чтобы определить тип исключения (и FIP, и FDP) и команду, которая его вызвала, а затем попытаться исправить ситуацию. Если бит маски наступившего исключения в регистре CR установлен в 1, выполняются следующие действия по умолчанию:


Таблица 12. Результаты операций, приводящих к исключениям


Операция Результат
Ошибка стека Неопределенность
Операция с неподдерживаемым числом Неопределенность
Операция с SNAN QNAN
Сравнение числа с NAN C0 = C2 = C3 = 1
Сложение бесконечностей с одним знаком или вычитание  — с разным Неопределенность
Умножение нуля на бесконечность Неопределенность
Деление бесконечности на бесконечность или 0/0 Неопределенность
Команды FPREM и FPREM1, если делитель  — 0 или делимое — бесконечность Неопределенность и C2 = 0
Тригонометрическая операция над бесконечностью Неопределенность и C2 = 0
Корень или логарифм, если x < 0, log(x+1), если x < -1 Неопределенность
FBSTP, если регистр-источник пуст, содержит NAN, бесконечность или превышает 18 десятичных знаков Десятичная неопределенность
FXCH, если один из операндов пуст Неопределенность

п»ї
"target=_blank><\/a>") //-->