Этот случай может возникнуть во всех арифметических командах а также в командах пересылки в память FST(P), связанный с преобразованием в меньший формат.
Если особый случай OE замаскирован, то в качестве результата операции выдается либо значение бесконечности с соответствующим знаком, либо граничное значение диапазона нормализованных чисел с соответствующим знаком.
5) UE – Underflow Error (антипереполнение, исчезновение/потеря порядка).
Особый случай возникает, когда результат операции оказывается в диапазоне , диапазоне денормализованных чисел, т.е. становится очень близким к нулю.
Этот случай может иметь место во всех арифметических командах, а также трансцендентных командах и в командах пересылки в память FST(P) с уменьшением формата.
При маскировании особого случая результатом операции является денормализованное число или «0».
6) PE – Precision Error (ошибка/потеря точности).
Особый случай PE возникает, если результат операции невозможно представить точно в формате приемника.
Этот случай возникает достаточно часто, например, если результатом операции является периодическая дробь.
Особый случай обычно маскируется и результат операции получается округлением в соответствии с заданным режимом, который задается полем RC(CW) в слове управления.
После округления бит C1(SW) признака результата в слове состояния показывает округлен ли неточный результат в большую сторону (C1 = 1) или в меньшую (C1 = 0).
Кроме того, этот особый случай всегда сопутствует ситуации антипереполнения, т.к. денормализация результата всегда приводит к потере точности.
7) SF – Stack Fault (ошибка/нарушение стека).
8) ES – Error Summary (суммарная ошибка).
Бит устанавливается при возникновении любого особого случая и участвует в формировании выходного сигнала FERR# (# означает что активным уровнем сигнала является низкий).
C3-C0 – код условия, похожи на арифметические флаги в регистре EFLAGS. Они фиксируют особенности результатов команд сравнения, проверки и анализа.
В отличие от арифметических флагов, арифметические команды FPU не оказывают влияния на коды условия за исключением бита C1. Этот бит в основном используется для фиксации вида ошибки при работе с регистровым стеком (IE=1 и SF=1).
В командах сравнения FCOM и её различных модификациях биты C3-C0 определяют результат сравнения операндов команды x с операндом из вершины стека:
C3 |
C0 |
|
ST(0)>x ST(0)<x ST(0)=x |
0 0 1 |
0 1 0 |
Бит C2 в свою очередь определяет сравнимость операндов (C2=0) или их несравнимость (C2=1). Операнды являются несравнимыми, если один из них или оба являются нечислами. В этом случае фиксируется ошибка IE недействительности операции.
При использовании несравнимых операндов все 3 бита C3=C2=C0=1.
Команда проверки FTST выполняет сравнение содержимого вершины стека с нулем с установкой признака (C3, C2, C0) по тем же правилам, что и в командах сравнения (при x=0).
Команда анализа FXAM (eXamine) производит анализ содержимого ST(0) и устанавливает соответствующие значения битов C3-C0. В бите C1 фиксируется знак операнда, а значения остальных битов соответствуют следующему содержимому регистра ST(0):
C3 |
C2 |
C0 |
||
0 0 0 0 1 1 1 |
0 0 1 1 0 0 1 |
0 1 0 1 0 1 0 |
неподдерживаемый формат NaN нормализованное число ∞ 0 пустой регистр денормализованное число |
9) TOP (указатель вершины регистрового стека).
Крайний левый бит B (Busy), этот бит, включенный в состав слова состояния SW, исключается для совместимости с младшими моделями, в которых установка бита B означала выполнение операции в математическом сопроцессоре (Intel 8087, 80287, 80387). Начиная с модели i486, бит B фактически копирует значение бита ES.
Слово управления, CW
Младшие 6 бит этого слова содержат маски особых случаев («1» замаскировано, «0» - разрешено прерывание).
Как правило, в нормальном режиме работы FPU все особые случаи замаскированы, т.е. реакцией на них является стандартное представление результата в виде некоторого специального значения и продолжения программы.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.