85
В необходимых случаях осуществляется округление — при переходе к форматам
с пониженной точностью.
Имеется еще множество специальных числовых значений, где как раз исполь-
зуются ранее невостребованные значения характеристики:
— денормализованные вещественные ( H = 0, m ≠ 0; в терминах ЕС ЭВМ это
— исчезновение порядка, ИСП);
— нуль («истинный»: H = 0, m = 0; соответствует потере значимости, ПЗН);
— бесконечность (аффинная; в i80286 была еще
проективная бесконечность; H
= 32 767, m = 1);
— нечисло (NaN: Not-a-Number; H = 32 767, m ≠ 1);
— вещественная неопределенность (частное NaN; H = 32 767, m = 1,10 … 0
2
).
Кроме того в i486 некоторые форматы i8087, i80287 не поддерживаются:
— псевдонечисла;
— псевдобесконечности;
— ненормализованные числа;
— псевдоденормализованные числа;
— псевдонули.
Классы команд FPU/i486:
— арифметические (18; FADD, FADDP, …);
— специально-арифметические (16; FSQRT, FSINCOS, …);
— сравнения (10; FCOM, …);
— пересылки данных (16; FLD, FLDPI, …);
— управления (14; FINIT, FNOP, FWAIT, …).
Форматы команд (рис. 2.21) мало отличаются от обычных процессорных ко-
манд.
В командах типа «память» при 32-разрядной (!) адресации, кроме байта адре-
сации «mod – r/m», присутствует
байт SIB и, возможно, байты смещения (1, 2 или
4). Поле ESC (11011) является своеобразным признаком сопроцессорной команды
(F — float).
В командах типа «регистр» второй операнд берется из стекового регистра
ST(i), i = 0 … 7, первый — всегда из ST(0), как и в командах типа «память».
Байты, предшествующие команде сопроцессора (рис. 2.21в), могут быть WAI T
(«Ожидание») или NOP («Нет операции»), а также представляющими префикс
смены сегментного
регистра.
Взаимодействие центрального (целочисленного) процессора и сопроцессора
(FPU в i486) — асинхронное. Пример такого взаимодействия показан на рис. 2.22.
При трансляции сопроцессорных команд (отмечены *) генерируется однобайт-
ная команда WAI T, вызывающая приостановку обращения к сопроцессору (ПО)
или даже совместно приостановку действия, т.е. приостановку до получения ре-
зультата в сопроцессоре (ПО/Д). Асинхронность взаимодействия обеспечивается
за
счет связи выхода сопроцессора (BUSY — занятость) и входа процессора (TEST
— проверка, требуется BUSY = 0).