ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы.



 

Часть 16

Глава 15. Архитектура модуля обработки операций с плавающей
          точкой
----------------------------------------------------------------
Для программистов устройство обработки операций с плавающей
точкой процессора i486(TM) представлено как набор дополнительных
регистров, типов данных и команд. Для детального описания набора
числовых команд смотрите Главу 26. В этой главе описываются
только числовые регистры и типы данных, входящие в архитектуру
процессора i486.
15.1 Числовые регистры
----------------------------------------------------------------
Числовые регистры процессора i486 включают:
- Восемь отдельно адресуемых 80-разрядных регистров,
  организованных как регистровый стек.
- Три 16-разрядных регистра, которые содержат:
  Слово состояния модуля обработки операций с плавающей точкой.
  Управляющее слово модуля обработки операций с плавающей
  точкой.
  Слово признака.
- Указатели ошибок, состоящие из:
  Двух 16-разрядных регистров, содержащих селекторы для
  последней операции и операнда.
  Двух 32-разрядных регистров, содержащих смещение для
  последней операции и операнда.
  Одного 11-разрядного регистра, содержащего код операции для
  последней команды модуля обработки операций с плавающей
  точкой, не принадлежащей к классу управляющих.
Все числовые команды процессора i486 основываются на содержании
этих регистров модуля обработки операций с плавающей точкой.
15.1.1 Регистровый стек модуля обработки операций с
       плавающей точкой
----------------------------------------------------------------
Регистровый стек модуля обработки операций с плавающей точкой
показан на Рисунке 15-1. Каждый из восьми числовых регистров в
стеке имеет размер 80 битов и разбит на поля соответственно
расширенному вещественному типу данных процессора i486.
Числовые команды адресуют регистры данных относительно регистра
на вершине стека. В любой момент времени этот регистр на вершине
стека указан полем TOP (вершина стека) в слове состояния
модуля обработки операций с плавающей точкой. Операции загрузки
или занесения в стек уменьшают TOP на единицу и загружают
значение в новый верхний регистр. Операция сохранения и
восстановления из стека сохраняет значение из текущего
TOP-регистра, а затем увеличивает TOP на единицу. Подобно стеку
в памяти, регистровый стек модуля обработки операций с плавающей
точкой растет вниз по направлению к регистрам с низшим адресом.
Многие числовые команды имеют различные режимы адресации,
которые позволяют программисту неявно обращаться к вершине стека
или явно оперировать определенными регистрами относительно
вершины стека TOP. Ассемблер ASM386/486 поддерживает эти режимы
адресации регистров, используя выражение ST(0) или просто ST для
того, чтобы обращаться к текущей вершине стека, и ST(i) для
того, чтобы определять i-тый регистр от вершины стека TOP (0 <=
i <= 7). Например, если TOP содержит число 011B (регистр 3 -
вершина стека), то следующий оператор добавляет содержимое двух
регистров в стек (регистры 3 и 5):
FADD  ST, ST(2)
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і                                                               і
і                                                               і
і                    РЕГИСТРЫ ДАННЫХ FPU                 ПОЛЕ   і
і                                                      ПРИЗНАКА і
і                                                               і
і          79 78     64 63                              0  1  0 і
і     ЪДДДДДДВДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї  ЪДДї і
і  R0 і ЗНАК і ПОРЯДОК і           МАНТИССА             і  і  і і
і     ГДДДДДДЕДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ  ГДДґ і
і  R1 і      і         і                                і  і  і і
і     ГДДДДДДЕДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ  ГДДґ і
і  R2 і      і         і                                і  і  і і
і     ГДДДДДДЕДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ  ГДДґ і
і  R3 і      і         і                                і  і  і і
і     ГДДДДДДЕДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ  ГДДґ і
і  R4 і      і         і                                і  і  і і
і     ГДДДДДДЕДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ  ГДДґ і
і  R5 і      і         і                                і  і  і і
і     ГДДДДДДЕДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ  ГДДґ і
і  R6 і      і         і                                і  і  і і
і     ГДДДДДДЕДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ  ГДДґ і
і  R7 і      і         і                                і  і  і і
і     АДДДДДДБДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ  АДДЩ і
і                                                               і
і     15                   0  47                              0 і
і     ЪДДДДДДДДДДДДДДДДДДДДї  ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї і
і     і РЕГИСТР УПРАВЛЕНИЯ і  і      УКАЗАТЕЛЬ  ОПЕРАЦИИ      і і
і     ГДДДДДДДДДДДДДДДДДДДДґ  ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ і
і     і РЕГИСТР СОСТОЯНИЯ  і  і       УКАЗАТЕЛЬ  ДАННЫХ       і і
і     ГДДДДДДДДДДДДДДДДДДДДґ  АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ і
і     і   СЛОВО ПРИЗНАКА   і                                    і
і     АДДДДДДДДДДДДДДДДДДДДЩ                                    і
і                                                               і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
       Рисунок 15-1. Набор Регистров FPU Процессора i486
Организация стека и адресация относительно вершины числовых
регистров значительно упрощает процедурное программирование, так
как позволяет процедурам передавать параметры через регистровый
стек. За счет использования стека для передачи параметров, а не
специально "посвященных" этому регистров, вызываемые процедуры
получают большую гибкость в использовании стека. Пока стек не
полон, каждая программа просто загружает параметры в стек перед
тем, как вызвать какую-либо подпрограмму для обработки численных
расчетов. Затем подпрограмма адресует эти параметры как ST,
ST(1) и так далее. При этом TOP, например, может даже ссылаться
на физический регистр 3 в одном вызове и на физический регистр 5
в другом.
15.1.2 Слово состояния модуля обработки операций с плавающей
       точкой
----------------------------------------------------------------
Показанное на Рисунке 15-2 16-разрядное слово состояния
отражает специальное состояние модуля обработки операций с
плавающей точкой. Это слово состояния может быть сохранено в
памяти с помощью команд FSTSW/FNSTSW, FSTENV/FNSTENV и FSAVE
/FNSAVE, а также передано в регистр AX с помощью команд FSTSW AX
/FNSTSW AX, позволяя модулю обработки целочисленных операций
проверять слово состояния модуля обработки операций с плавающей
точкой.
Бит B (бит 15) включен в слово только для совместимости с
сопроцессором 8087. Он отражает содержание бита ES (бит 7 слова
состояния).
Четыре бита кода условия модуля обработки операций с плавающей
точкой (C3-C0) подобны флагам в ЦПУ: процессор i486 обновляет
эти биты для того, чтобы отразить результат арифметических
операций. Действие команд на биты кода условия приведены в
Таблице 15-1. Биты кода условия в принципе используются для
условного ветвления. Команда FSTSW AX сохраняет слово состояния
модуля непосредственно в регистре AX, позволяя процессору i486
просматривать эти коды условия. Команда SAHF может копировать
C3-C0 непосредственно в биты флагов процессора i486 для того,
чтобы упростить условное ветвление. В Таблице 15- 2 показано
соответствие этих битов битам флагов процессора i486.
       Рисунок 15-2. Слово Состояния FPU Процессора i486
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і                                                               і
і                                                               і
і              ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД  FPU ЗАНЯТО      і
і              і                                                і
і              і   ЪДВДВДДДДДДДДДДДДДДД ВЕРШИНА УКАЗАТЕЛЯ СТЕКА і
і              і ЪДі-і-іДВДВДВДДДДДДДДДДДДДДДД КОД УСЛОВИЯ      і
і              і і і і і і і і                                  і
і                                                       і
і             15               7             0                  і
і             ЪДВДВДВДВДВДВДВДВДВДВДВДВДВДВДВДї                 і
і             іBіCі TOP іCіCіCіEіSіPіUіOіZіDіIі                 і
і             і і3і     і2і1і0іSіFіEіEіEіEіEіEі                 і
і             АДБДБДБДБДБДБДБДБДБДБДБДБДБДБДБДЩ                 і
і                                                       і
і                              і і і і і і і і                  і
і  СУММАРНЫЙ СТАТУС ОШИБОК ДДДДЩ і і і і і і і                  і
і  ОШИБКА СТЕКА ДДДДДДДДДДДДДДДДДЩ і і і і і і                  і
і  ФЛАГИ ОСОБЫХ СИТУАЦИЙ           і і і і і і                  і
і    ТОЧНОСТЬ ДДДДДДДДДДДДДДДДДДДДДЩ і і і і і                  і
і    ОТРИЦАТЕЛЬНОЕ ПЕРЕПОЛНЕНИЕ ДДДДДЩ і і і і                  і
і    ПЕРЕПОЛНЕНИЕ ДДДДДДДДДДДДДДДДДДДДДЩ і і і                  і
і    ДЕЛЕНИЕ НА НОЛЬ ДДДДДДДДДДДДДДДДДДДДЩ і і                  і
і    НЕНОРМАЛИЗОВАННЫЙ ОПЕРАНД ДДДДДДДДДДДДЩ і                  і
і    НЕДОПУСТИМАЯ ОПЕРАЦИЯ ДДДДДДДДДДДДДДДДДДЩ                  і
і                                                               і
і  БИТ ES УСТАНАВЛИВАЕТСЯ В ТОМ СЛУЧАЕ, ЕСЛИ УСТАНАВЛИВАЕТСЯ    і
і  НЕМАСКИРОВАННЫЙ БИТ ИСКЛЮЧЕНИЯ. В ПРОТИВНОМ СЛУЧАЕ ОЧИЩЕН.   і
і                                                               і
і  ДЛЯ ИНТЕРПРЕТАЦИИ КОДА УСЛОВИЯ ОБРАТИТЕСЬ К ТАБЛИЦЕ 2-1.     і
і  ЗНАЧЕНИЕ ВЕЛИЧИНЫ TOP:                                       і
і    000 = РЕГИСТР 0 - ВЕРШИНА СТЕКА                            і
і    001 = РЕГИСТР 1 - ВЕРШИНА СТЕКА                            і
і             .                                                 і
і             .                                                 і
і             .                                                 і
і    111 = РЕГИСТР 7 - ВЕРШИНА СТЕКА                            і
і  ДЛЯ ОПРЕДЕЛЕНИЯ ИСКЛЮЧЕНИЙ ОБРАТИТЕСЬ К ГЛАВЕ 3.             і
і                                                               і
і                                                               і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
Биты 12-14 слова состояния указывают на регистр модуля обработки
операций с плавающей точкой, который является текущей вершиной
стека (TOP). Назначение вершины стека описано в предыдущем
разделе по регистровому стеку.
Рисунок 15-2 демонстрирует шесть флагов исключений в битах 0-5
слова состояния. Бит 7 - это бит суммарного состояния
исключений (ES). Бит ES установлен, если любые немаскируемые
биты исключений установлены, и очищен в противном случае. Биты 0
-5 указывают на то, обнаружил ли модуль обработки операций с
плавающей точкой одно из шести возможных условий исключеня с тех
пор, как биты состояния были последний раз очищены или
переустановлены. Это "липкие" биты и могут быть очищены только
командами FINIT, FCLEX, FLDENV, FSAVE и FRSTOR.
            Таблица 15-1. Интерпретация Кода Условия
ЪДДДДДДДДДДДДДДДДДВДДДДДДДДВДДДДДДДДВДДДДДДДДДДДДДДДДВДДДДДДДДДДї
і                 і        і        і                і          і
і    КОМАНДЫ      і  C0    і   C3   і       C2       і    C1    і
і                 і        і        і                і          і
ГДДДДДДДДДДДДДДДДДЕДДДДДДДДБДДДДДДДДЕДДДДДДДДДДДДДДДДЕДДДДДДДДДДґ
і                 і                 і                і          і
і FCOM, FCOMP,    і                 і                і          і
і FCOMPP, FTST,   і    Результат    і   Операнд не   і   Ноль   і
і FUCOM, FUCOMP,  і    сравнения    і     сравним    і или O/U# і
і FUCOMPP, FICOM, і                 і                і          і
і FICOMP          і                 і                і          і
ГДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДЕДДДДДДДДДДґ
і FXAM            і          Класс  Операнда         і Знак или і
і                 і                                  і O/U#     і
ГДДДДДДДДДДДДДДДДДЕДДДДДДДДВДДДДДДДДВДДДДДДДДДДДДДДДДЕДДДДДДДДДДґ
і FPREM, FPREM1   і        і        і 0=сокращение   і Q1       і
і                 і  Q2    і   Q0   і закончено      і или O/U# і
і                 і        і        і 1=не закончено і          і
ГДДДДДДДДДДДДДДДДДЕДДДДДДДДБДДДДДДДДБДДДДДДДДДДДДДДДДЕДДДДДДДДДДґ
і FIST, FBSTP,    і                                  і          і
і FRNDINT, FST,   і                                  і          і
і FSTP, FADD,     і                                  і          і
і FMUL, FDIV,     і                                  і Округлен і
і FDIVR, FSUB     і         НЕ    ОПРЕДЕЛЕНЫ         і или O/U# і
і FSUBR, FSCALE,  і                                  і          і
і FSQRT, FPATAN,  і                                  і          і
і F2XM1, FYL2X,   і                                  і          і
і FYL2XP1         і                                  і          і
ГДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДЕДДДДДДДДДДґ
і FPTAN, FSIN,    і                 і 0=сокращение   і Округлен і
і FCOS, FSINCOS   і  НЕ ОПРЕДЕЛЕНЫ  і закончено      і или O/U# і
і                 і                 і 1=не закончено і(если C2=1і
і                 і                 і                інеопредел)і
ГДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДЕДДДДДДДДДДґ
і FCHS, FABS,     і                                  і          і
і FXCH, FINCSTP,  і                                  і          і
і FDECSTP, Загруз-і                                  і          і
і ка констант, FX-і          НЕ    ОПРЕДЕЛЕНЫ        і   Ноль   і
і TRACT, FLD, FILDі                                  і или O/U# і
і FBLD, FSTP (рас-і                                  і          і
і шр.вещественное)і                                  і          і
ГДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДґ
і FLDENV, FRSTOR  і      Каждый  бит  загружен из  памяти       і
ГДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і FLDCW, FSTENV,  і                                             і
і FSTCW, FSTSW,   і                 НЕ   ОПРЕДЕЛЕНЫ             і
і FCLEX           і                                             і
ГДДДДДДДДДДДДДДДДДЕДДДДДДДДВДДДДДДДДВДДДДДДДДДДДДДДДДВДДДДДДДДДДґ
і FINIT, FSAVE    і  Ноль  і  Ноль  і      Ноль      і   Ноль   і
АДДДДДДДДДДДДДДДДДБДДДДДДДДБДДДДДДДДБДДДДДДДДДДДДДДДДБДДДДДДДДДДЩ
O/U#          Если оба бита IE и SF установлены в слове
              состояния, показывая исключение стека, то это бит
              имеет значение переполнения стека (C1=1) или
              отрицательного переполнения (C1=0).
Сокращение    Если результат операций FPREM и FPREM1 остаток,
              который меньше делителя, то сокращение закончено.
              Если сокращение не закончено, то в вершине стека
              будет находиться частичный остаток, который может
              использоваться для дольнейшего сокращения. Для
              команд FPTAN, FSIN, FCOS и FSINCOS бит сокращения
              устанавливается в том случае, если операнд в
              вершине стека слишком большой. В этом случае
              исходный операнд остается в вершине стека.
Округление    Когда в слове состояния установлен бит PE, он
              показывает, было ли последнее округление
              округлением сверху.
НЕ ОПРЕДЕЛЕНЫ Эти биты не содержат определенных значений.
Бит 6 является битом ошибки стека (SF). Этот бит отличает
запрещенные команды, влекущие за собой переполнение или
отрицательное переполнение стека, от другого рода запрещенных
команд. Когда SF установлен, бит 9 (C1) определяет переполнение
стека (C1=1) либо отрицательное переполнение стека (C1=0).
    Таблица 15-2. Соответствие Между Битами Флагов FPU и IU
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і                               і                               і
і         Флаги  FPU            і          Флаг  IU             і
і                               і                               і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і              C0               і              CF               і
і                               і                               і
і              C1               і            (пусто)            і
і                               і                               і
і              C2               і              PF               і
і                               і                               і
і              C3               і              ZF               і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
15.1.3 Управляющее слово
----------------------------------------------------------------
Модуль обработки операций с плавающей точкой позволяет
программистам использовать различные режимы обработки, которые
выбираются посредством загрузки слова из памяти в управляющее
слово. На Рисунке 15-3 показаны формат и кодировка полей в
управляющем слове.
Младшие байты этого управляющего слова определяют маскирование
вычислительных исключений. Биты 0-5 управляющего слова содержат
индивидуальные маски для каждого из шести условий исключений,
опознаваемых процессором i486, при обработке операций с
плавающей точкой. Высшие биты управляющего слова определяют
параметры работы устройства обработки операций с плавающей
точкой, включающие в себя:
- Управление точностью
- Управление округлением
Биты управления точностью (биты 8-9) могут быть использованы для
того, чтобы установить меньшую точность внутренних операций
устройства, чем точность по умолчанию (мантисса в 64-ре бита).
Эти биты управления могут быть использованы для предоставления
совместимости с ранними поколениями арифметических процессоров,
которые имеют меньшую точность, чем процессор i486 или
арифметический сопроцессор 387. Биты управления точностью
действуют только на результаты следующих арифметических
операций: ADD, SUB(R), MUL, DIV(R) и SQRT. Никакие другие
операции не управляются точностью.
Биты управления округлением (биты 8-9) предоставляют обычный
режим округления до ближайшего, а также непосредственное
округление и истинное отсечение. Управление округлением
действует только на арифметические операции (список
арифметических и неарифметических операций приведен в Главе 16).
15.1.4 Слово тега устройства обработки операций с плавающей
       точкой
----------------------------------------------------------------
Слово тега указывает содержание каждого регистра в
регистровом стеке, как показано на Рисунке 15-4. Слово тега
используется самим модулем обработки операций с плавающей точкой
для того, чтобы отличать пустое и непустое положение регистров.
При программировании обработчиков исключений можно использовать
эту информацию для того, чтобы проверять содержимое числовых
регистров без выполнения сложного раскодирования настоящих
данных в регистре. Значения тега из слова тега соответствуют
физическим регистрам 0-7. Программист должен использовать
указатель на текущую вершину стека (TOP), хранимую в слове
состояния модуля, для того, чтобы сопоставить эти значения тега
с отностительными регистрами стека от ST(0) до ST(7).
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і                                                               і
і                                                               і
і              ЪДВДВДДДДДДДДДДДДДДДДДДДДДДДДД  ЗАРЕЗЕРВИРОВАНЫ  і
і              і і і ЪДДДДДДДДДДД (УПРАВЛЕНИЕ БЕСКОНЕЧНОСТЬЮ)*  і
і              і і і і ЪДВДДДДДДДДДДДДД УПРАВЛЕНИЕ ОКРУГЛЕНИЕМ  і
і              і і і і і і ЪДВДДДДДДДДДДД УПРАВЛЕНИЕ ТОЧНОСТЬЮ  і
і              і і і і і і і і                                  і
і                                                       і
і             15               7             0                  і
і             ЪДВДВДВДВДВДВДВДВДВДВДВДВДВДВДВДї                 і
і             іX X  іXіR CіP CіX XіPіUіOіZіDіIі                 і
і             і     і і   і   і   іMіMіMіMіMіMі                 і
і             АДБДБДБДБДБДБДБДБДБДБДБДБДБДБДБДЩ                 і
і                                                       і
і                              і і і і і і і і                  і
і  ЗАРЕЗЕРВИРОВАНЫ ДДДДДДДДДДДДБДЩ і і і і і і                  і
і  МАСКА ИСКЛЮЧЕНИЙ                і і і і і і                  і
і    ТОЧНОСТЬ ДДДДДДДДДДДДДДДДДДДДДЩ і і і і і                  і
і    ОТРИЦАТЕЛЬНОЕ ПЕРЕПОЛНЕНИЕ ДДДДДЩ і і і і                  і
і    ПЕРЕПОЛНЕНИЕ ДДДДДДДДДДДДДДДДДДДДДЩ і і і                  і
і    ДЕЛЕНИЕ НА НОЛЬ ДДДДДДДДДДДДДДДДДДДДЩ і і                  і
і    НЕНОРМАЛИЗОВАННЫЙ ОПЕРАНД ДДДДДДДДДДДДЩ і                  і
і    НЕДОПУСТИМАЯ ОПЕРАЦИЯ ДДДДДДДДДДДДДДДДДДЩ                  і
і                                                               і
і  УПРАВЛЕНИЕ ОКРУГЛЕНИЕМ                                       і
і    00 - ОКРУГЛЕНИЕ ДО БЛИЖАЙШЕГО ИЛИ ДО ЧЕТНОГО               і
і    01 - ОКРУГЛЕНИЕ ПО НЕДОСТАТКУ (К МИНУС БЕСКОНЕЧНОСТИ)      і
і    10 - ОКРУГЛЕНИЕ ПО ИЗБЫТКУ (К ПЛЮС БЕСКОНЕЧНОСТИ)          і
і    11 - ОТСЕЧЕНИЕ (ОТБРАСЫВАНИЕ РАЗРЯДОВ)                     і
і                                                               і
і  УПРАВЛЕНИЕ ТОЧНОСТЬЮ                                         і
і    00 - 24 БИТА (ОБЫЧНАЯ ТОЧНОСТЬ)                            і
і    01 - (ЗАРЕЗЕРВИРОВАНО)                                     і
і    10 - 53 БИТА (ДВОЙНАЯ ТОЧНОСТЬ)                            і
і    11 - 64 БИТА (РАСШИРЕННАЯ ТОЧНОСТЬ)                        і
і                                                               і
і  * - Этот бит "Управления бесконечностью" не устанавливается  і
і      для Процессора i486(TM). Для поддержки совместимости с   і
і      процессором 80287 этот бит может быть запрограммирован;  і
і      однако, независимо от его значения, FPU процессора       і
і      i486(TM) трактует бесконечность в афинном смысле         і
і      (от минус до плюс бесконечности).                        і
і                                                               і
і                                                               і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
  Рисунок 15-3. Формат Управляющего Слова FPU Процессора i486
Точные значения тега генерируются в процессе выполнения
команд FSTENV и FSAVE, в соответствии с действительным
содержанием непустых положений стека. В процессе выполнения
других команд, процессор i486 обновляет слово тега только для
того, чтобы указать, является ли положение стека пустым или
непустым.
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і                                                               і
і   15                                                      0   і
і   ЪДДДВДДВДДДВДДВДДДВДДВДДДВДДВДДДВДДВДДДВДДВДДДВДДВДДДВДДї   і
і   іПРИЗ- іПРИЗ- іПРИЗ- іПРИЗ- іПРИЗ- іПРИЗ- іПРИЗ- іПРИЗ- і   і
і   іНАК(7)іНАК(6)іНАК(5)іНАК(4)іНАК(3)іНАК(2)іНАК(1)іНАК(0)і   і
і   АДДДБДДБДДДБДДБДДДБДДБДДДБДДБДДДБДДБДДДБДДБДДДБДДБДДДБДДЩ   і
і                                                               і
і   ЗНАЧЕНИЯ ПРИЗНАКА:                                          і
і      00 = ДОПУСТИМЫЙ                                          і
і      01 = НОЛЬ                                                і
і      10 = ОСОБЫЙ: НЕДОПУСТИМЫЙ (NaN, НЕПОДДЕРЖИВАЕМЫЙ),       і
і                   НЕОПРЕДЕЛЕННЫЙ ИЛИ НЕНОРМАЛЬНЫЙ             і
і      11 = ПУСТО                                               і
і                                                               і
і                                                               і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
              Рисунок 15-4. Формат Слова Признака
15.1.5 Указатели числовых команд и данных
----------------------------------------------------------------
Указатели команд и данных позволяют работать с программируемыми
обработчиками исключений. Эти регистры доступны через
ESC-команды FLDENV, FSTENV, FSAVE и FRSTOR. Всегда, когда
процессор i486 раскодирует ESC-команду, он сохраняет адрес
команды, адрес операнда (если есть) и код операции.
При сохранении в памяти, указатели команд и данных находятся
в одном из четырех форматов, в зависимости от режима работы
процессора (защищенный режим или режим абсолютной адресации) и в
зависимости от атрибута размера операнда (32 или 16 битовый
операнд). В режиме виртуального процессора 8086 используются
форматы режима абсолютной адресации.
На всех иллюстрациях от Рисунка 15-5 до Рисунка 15-8 эти
указатели показаны так, как они сохраняются после команды
FSTENV.
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і                                                               і
і           ФОРМАТ  32-БИТНОГО  ЗАЩИЩЕННОГО  РЕЖИМА             і
і                                                               і
і     31           23          15          7          0         і
і     ЪДДДДДДДДДДДЕДДДДДДДДДДДВДДДДДДДДДДДЕДДДДДДДДДДДї         і
і     і   ЗАРЕЗЕРВИРОВАНО     і  УПРАВЛЯЮЩЕЕ   СЛОВО  і 0H      і
і     ГДДДДДДДДДДДЕДДДДДДДДДДДіДДДДДДДДДДДЕДДДДДДДДДДДґ         і
і     і   ЗАРЕЗЕРВИРОВАНО     і   СЛОВО   СОСТОЯНИЯ   і 4H      і
і     ГДДДДДДДДДДДЕДДДДДДДДДДДіДДДДДДДДДДДЕДДДДДДДДДДДґ         і
і     і   ЗАРЕЗЕРВИРОВАНО     і   СЛОВО   ПРИЗНАКА    і 8H      і
і     ГДДДДДДДДДДДЕДДДДДДДДДДДіДДДДДДДДДДДЕДДДДДДДДДДДґ         і
і     і      СМЕЩЕНИЕ   IP (указателя команд)         і CH      і
і     ГДДДДДДДДДДДЕДДДДДДДДДДДіДДДДДДДДДДДЕДДДДДДДДДДДґ         і
і     і   ЗАРЕЗЕРВИРОВАНО     і     СЕЛЕКТОР  CS      і 10H     і
і     ГДДДДДДДДДДДЕДДДДДДДДДДДіДДДДДДДДДДДЕДДДДДДДДДДДґ         і
і     і        СМЕЩЕНИЕ    ОПЕРАНДА    ДАННЫХ         і 14H     і
і     ГДДДДДДДДДДДЕДДДДДДДДДДДіДДДДДДДДДДДЕДДДДДДДДДДДґ         і
і     і   ЗАРЕЗЕРВИРОВАНО     і   СЕЛЕКТОР ОПЕРАНДА   і 18H     і
і     АДДДДДДДДДДДЕДДДДДДДДДДДБДДДДДДДДДДДЕДДДДДДДДДДДЩ         і
і                                                               і
і                                                               і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
Рисунок 15-5. Числовые Коианды Защищенного Режима и Отображение
              Указателя Данных в Памяти, 32-х битный формат
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і                                                               і
і       ФОРМАТ  32-БИТНОГО  РЕЖИМА  АБСОЛЮТНОЙ  АДРЕСАЦИИ       і
і                                                               і
і  31           23          15          7                0      і
і  ЪДДДДДДДДДДДЕДДДДДДДДДДДВДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДї      і
і  і   ЗАРЕЗЕРВИРОВАНО     і  УПРАВЛЯЮЩЕЕ   СЛОВО        і 0H   і
і  ГДДДДДДДДДДДЕДДДДДДДДДДДіДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДґ      і
і  і   ЗАРЕЗЕРВИРОВАНО     і   СЛОВО   СОСТОЯНИЯ         і 4H   і
і  ГДДДДДДДДДДДЕДДДДДДДДДДДіДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДґ      і
і  і   ЗАРЕЗЕРВИРОВАНО     і   СЛОВО   ПРИЗНАКА          і 8H   і
і  ГДДДДДДДДДДДЕДДДДДДДДДДДіДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДґ      і
і  і   ЗАРЕЗЕРВИРОВАНО     і  УКАЗАТЕЛЬ  КОМАНДЫ   15..0 і CH   і
і  ГДДДДВДДДДДДЕДДДДДДДДДДДБДДДДДДДДДВДЕДДДДДДДДДДДДДДДДДґ      і
і  і0000іУКАЗАТЕЛЬ  КОМАНДЫ    31..16і0іКОД ОПЕРАЦИИ 10.0і 10H  і
і  ГДДДДБДДДДДДЕДДДДДДДДДДДіДДДДДДДДДБДЕДДДДДДДДДДДДДДДДДґ      і
і  і   ЗАРЕЗЕРВИРОВАНО     і   УКАЗАТЕЛЬ ОПЕРАНДА 15..0  і 14H  і
і  ГДДДДВДДДДДДЕДДДДДДДДДДДіДДДДДДДДДВДЕДДДДДДДДДДДДДДДДДґ      і
і  і0000і УКАЗАТЕЛЬ ОПЕРАНДА 31..16  і    000000000000   і 18H  і
і  АДДДДБДДДДДДЕДДДДДДДДДДДБДДДДДДДДДБДЕДДДДДДДДДДДДДДДДДЩ      і
і                                                               і
і                                                               і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
Рисунок 15-6. Числовые Команды Режима Абсолютной Адресации и
              Отображение Указателя Данных в Памяти, 32-разрядный
              формат
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і                                                               і
і           ФОРМАТ  16-БИТНОГО  ЗАЩИЩЕННОГО  РЕЖИМА             і
і                                                               і
і            15               7              0                  і
і            ЪДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДї                  і
і            і     УПРАВЛЯЮЩЕЕ    СЛОВО      і 0H               і
і            ГДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДґ                  і
і            і        СЛОВО   СОСТОЯНИЯ      і 2H               і
і            ГДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДґ                  і
і            і        СЛОВО   ПРИЗНАКА       і 4H               і
і            ГДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДґ                  і
і            і СМЕЩЕНИЕ IP(указателя команды)і 6H               і
і            ГДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДґ                  і
і            і          СЕЛЕКТОР  CS         і 8H               і
і            ГДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДґ                  і
і            і      СМЕЩЕНИЕ   ОПЕРАНДА      і AH               і
і            ГДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДґ                  і
і            і      СЕЛЕКТОР   ОПЕРАНДА      і CH               і
і            АДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДЩ                  і
і                                                               і
і                                                               і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
Рисунок 15-7. Числовые Команды Защищенного Режима и Отображение
              Указателя Данных в Памяти, 16-ти битовый формат
Команды FSTENV и FSAVE хранят эти данные в памяти, позволяя
обработчикам исключений определять тид любого исключения,
которое может встретиться.
Адрес команды указывает на любые префиксы, которые предшествуют
команде, как и в математических сопроцессорах 387 и 80287.
Здесь есть отличие от сопроцессора 8087, для которого адрес
команд указывает только на код ESC-команды.
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і                                                               і
і        ФОРМАТ 16-БИТНОГО РЕЖИМА АБСОЛЮТНОЙ АДРЕСАЦИИ          і
і        И ФОРМАТ РЕЖИМА ВИРТУАЛЬНОГО ПРОЦЕССОРА 8086           і
і                                                               і
і            15               7              0                  і
і            ЪДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДї                  і
і            і     УПРАВЛЯЮЩЕЕ    СЛОВО      і 0H               і
і            ГДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДґ                  і
і            і        СЛОВО   СОСТОЯНИЯ      і 2H               і
і            ГДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДґ                  і
і            і        СЛОВО   ПРИЗНАКА       і 4H               і
і            ГДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДґ                  і
і            і  УКАЗАТЕЛЬ  КОМАНДЫ    15..0  і 6H               і
і            ГДДДДДДДДДДВДВДДЕДДДДДДДДДДДДДДДґ                  і
і            іУКАЗАТЕЛЬ і і                  і                  і
і            і КОМАНД   і0іКОД ОПЕРАЦИИ 10..0і 8H               і
і            і 19..16   і і                  і                  і
і            ГДДДДДДДДДДБДБДДЕДДДДДДДДДДДДДДДґ                  і
і            і   УКАЗАТЕЛЬ  ОПЕРАНДА 15..0   і AH               і
і            ГДДДДДДДДДДВДВДДЕДДДДДДДДДДДДДДДґ                  і
і            іУКАЗАТЕЛЬ і і                  і                  і
і            і ДАННЫХ   і0і   00000000000    і CH               і
і            і 19..16   і і                  і                  і
і            АДДДДДДДДДДБДБДДЕДДДДДДДДДДДДДДДЩ                  і
і                                                               і
і                                                               і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
Рисунок 15-8. Числовые Командыи Режима Абсолютной Адресации и
              Отображение Указателя Данных в Памяти, 16-битовый
              формат
Обратите внимание, что команды управления процессором FINIT,
FLDCW, FSTCW, FSTSW, FCLEX, FSTENV, FLDENV, FSAVE и FRSTOR не
действуют на указатель данных. Обратите также внимание на то,
что значение указателя данных неопределено, если предыдущая ESC-
команда не имела операнда памяти. Единственное исключение
составляют только что упомянутые команды.
15.2 Основы вычислений
----------------------------------------------------------------
Этот раздел описывает концепции вычислительного
программирования, которые являются общими для всех прикладных
систем. В этом разделе описывается встроенная система чисел,
принятая в модуле обработки операций с плавающей точкой
процессора i486, а также различные типы чисел, которые можно
задействовать в вычислительных программах. Также описаны
наиболее часто используемые варианты округления и точности
(устанавливаемые полями в управляющем слове) с полным перечнем
наименее часто используемых возможностей, оставленных для
следующих разделов. Условия исключений, которые могут возникнуть
в процессе выполнения команды с плавающей точкой, приведены при
изложения материала вместе с опциями, которые реагируют на эти
исключения.
15.2.1 Система чисел
----------------------------------------------------------------
Система вещественных чисел, которую мы используем для ручных
вычислений, бесконечна в обе стороны. Не существует верхней и
нижней границы для чисел, которые мы можем использовать в
расчетах, и для точности (количества значащих цифр), которая
может потребоваться для представления этих чисел. Для любого
данного вещественного числа всегда существует бесконечное
множество чисел, которые больше или меньше этого числа. Кроме
того, существует бесконечно много чисел между двумя
вещественными числами. Например, между числами 2.5 и 2.6
существуют числа 2.51, 2.5897, 2.500001 и так далее.
Хотя в идеале желательно было бы конечно, чтобы компьютер
манипулировал на всем множестве вещественных чисел, но на
практике это невозможно. Компьютеры, вне зависимости от их
величины, имеют ограниченные размеры регистров и памяти,
которые, собственно, и ограничивают систему чисел, реализуемых
на компьютере. Эти ограничения определяют как диапазон, так и
точность чисел. В результате получается множество чисел, которое
является ограниченным и дискретным, а не бесконечным и
неограниченным. Эта последовательность представляет собой
подмножество действительных чисел и разработана для того, чтобы
сформировать некоторую аппроксимацию системы вещественных чисел,
которую можно было бы использовать на компьютерах.
На Рисунке 15-9 показана базовая система чисел с плавающей
точкой процессора i486 на вещественной прямой (для ясности
показаны десятичные числа, на самом деле процессор i486
использует числа в двоичном представлении). Точки указывают
подмножество действительных чисел, которое процессор i486 может
представить как данные и как конечный результат вычислений.
Нормализованные числа с двойной точностью изменяются в примерном
диапазоне от +-2.23 x 10**(-308) до +-1.79 x 10**(308). При этом
очень редко можно встретить случаи, когда программное
обеспечение требует работы с данными и конечным результатом за
рамками этого диапазона. Для сравнения приведем диапазон чисел
компьютера IBM System 370*, он составляет примерно от +-0.54 x
10 **(-78) до +-0.72 x 10**(76).
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і                                                               і
і                                                               і
і                                                               і
і          ОТРИЦАТЕЛЬНЫЙ                  ПОЛОЖИТЕЛЬНЫЙ         і
і  |ДДДД    ДИАПАЗОН   ДДДДД|   |ДДДД    ДИАПАЗОН   ДДДДД|  і
і  |     (НОРМАЛИЗОВАННЫЙ)    |   |     (НОРМАЛИЗОВАННЫЙ)    |  і
і  |      -5  -4  -3  -2  -1  |   |  1 ЪД2Дї 3   4   5       |  і
і  *ДД) (**Е***Е***Е***Е***Е*** 0 ***Е*і*Е*і*Е***Е***Е**) (ДД*  і
і                                   АДДДЩДДї               і
і  і         308         -308 і   і       -308 і         308 і  і
і  АД -1.79x10     -2.23x10  ДЩ   АД 2.23x10   і   1.79x10  ДЩ  і
і                                              і                і
і                                              і                і
і                            ЪДДДДДДДДДДДДДДДДДБДДДДДДДДДДДї    і
і                            і         +2                  і    і
і                            і   ДД*ДДДД*ДДДД*             і    і
і                            і                           і    і
і                            і     іДВі                  і    і
і                            і     і  і А2.000000000000000 і    і
і                            і     і  АДД (НЕ ПРЕДСТАВИМО) і    і
і                            і     АДДД 1.999999999999999  і    і
і                            і ТОЧНОСТЬіДДД 16 ЦИФР ДДДі і    і
і                            і                             і    і
і                            АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ    і
і                                                               і
і                                                               і
і                                                               і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
          Рисунок 15-9. Система Чисел Двойной Точности
Ограниченное пространство на Рисунке 15-9 иллюстрирует то, что
процессор i486 может представить довольно много вещественных
чисел, но не все, из этого диапазона. Всегда существует
пространство между двумя соседними числами с плавающей точкой и
возможно, что результат вычислений попадет в это пространство.
Когда такое случается, модуль обработки команд с плавающей
точкой округляет истинный результат до числа, которое оно может
представить. Вещественное число, которое требует больше цифр,
чем модуль обработки операций с плавающей точкой может дать (то
есть число из 20-ти цифр), представляется с некоторой потерей
точности. Обратите внимание также на то, что представимые числа
располагаются не ровно вдоль вещественной прямой. Фактически
такое же количество представимых чисел существует между любыми
двумя последовательными степенями двойки (то есть такое же
множество представимых чисел существует как между 2 и 4, так и
между 65536 и 131072). Хотя, расстояние между представимыми
числами больше у чисел, величина которых больше. Однако, все
целые в диапазоне +-2**(64) (примерно +-10**(19)) представляются
точно.
Во внутренних операциях модуль обработки операций с плавающей
точкой на самом деле работает с системой чисел, которая является
вещественным подмножеством системы, показанной на Рисунке 15-9.
Внутренний формат (называемый расширенные вещественные)
расширяет нормализованный диапазон представимых чисел примерно
от +-3.37 x 10**(-4932) до +- 1.18 x 10**(4932), а точность
примерно до 19 (в десятичном виде) цифр. Этот формат разработан
для того, чтобы предоставить дополнительный диапазон и точность
для констант и промежуточных результатов, и не применим к данным
или конечному результату.
С практической точки зрения, множество действительных чисел
процессора i486 достаточно велико и плотно для того, чтобы не
ограничивать возможности большинства прикладных программ. По
сравнению с большинством компьютеров, включая большие машины,
процессор i486 дает очень хорошую аппроксимацию системы
вещественных чисел. При этом, однако, важно помнить, что это не
точное представление и что компьютерная арифметика над
вещественными числами является все еще приближенной.
15.2.2 Типы и форматы данных
----------------------------------------------------------------
Процессор i486 различает семь типов числовых данных в памяти.
Они разделены на три класса: двоичные целые, упакованные
десятичные целые и двоичные вещественные. В последущих разделах
будет дана информация о том, как эти три формата храняться в
памяти (знак всегда располагается в самом верхнем байте).
На Рисунке 15-10 приведены форматы каждого типа данных и
большинство значащих цифр всех чисел (и полей внутри чисел)
являются левосторонними цифрами.
15.2.2.1 Двоичные целые
----------------------------------------------------------------
Три формата двоичных целых отождествляются своей длиной, которая
управляет диапазоном, представимым в каждом формате. Самый левый
бит трактуется как знак числа: 0=положительное, 1=отрицательное.
Отрицательные числа представляются в стандартной нотации
дополнения в двоичной системе счисления (двоичные целые должны
быть только в формате процессора i486 для того, чтобы можно было
использовать дополнение в двоичной системе счисления). Число
ноль представляется с положительным знаком (все биты нули).
Формат целого слова в процессоре i486 отождествляется с
16-разрядным целочисленным типом данных со знаком; формат
короткого целого отождествляется с 32-разрядным целочисленным
типом данных со знаком.
Все эти двоичные целочисленные форматы существуют только в
памяти. При использовании модулем обработки операций с плавающей
точкой процессора i486 они автоматически переводятся в 80-ти
битный расширенный вещественный формат. Все двоичные целые
являются точно представимыми в расширенном вещественном формате.
ЪДДДДДДДДДВДДДДДВДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і         і     і       іСАМЫЙ                           СТАРШИЙі
і ФОРМАТЫ іДИАПАі ТОЧ-  іЗНАЧАЩИЙ БАЙТ           АДРЕСУЕМЫЙ БАЙТі
і ДАННЫХ  і ЗОН і НОСТЬ ГДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДДВДДДґ
і         і     і       і7 0і7 0і7 0і7 0і7 0і7 0і7 0і7 0і7 0і7 0і
ГДДДДДДДДДЕДДДДДЕДДДДДДДЕДДДБДДДБДДДБДДДБДДДБДДДБДДДБДДДБДДДБДДДґ
і ЦЕЛОЕ   і   4 і       ГДДДДДДДї (ДОПОЛНЕНИЕ В ДВОИЧНОЙ СИСТЕМЕі
і СЛОВО   і 10  і16 БИТ ГДДДДДДДЩ  СЧИСЛЕНИЯ)                   і
і         і     і       і15     0                               і
ГДДДДДДДДДЕДДДДДЕДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і КОРОТКОЕі   9 і       ГДДДДДДДДДДДДДДДї (ДОПОЛНЕНИЕ В ДВОИЧНОЙі
і ЦЕЛОЕ   і 10  і32 БИТАГДДДДДДДДДДДДДДДЩ  СИСТЕМЕ СЧИСЛЕНИЯ)   і
і         і     і       і31             0                       і
ГДДДДДДДДДЕДДДДДЕДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і ДЛИННОЕ і   18і       ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї(ДОПОЛ-і
і ЦЕЛОЕ   і 10  і64 БИТАГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ НЕНИЕ і
і         і     і       і63                             0 В 2сс)і
ГДДДДДДДДДЕДДДДДЕДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і         і     і       ГДВДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
іУПАКОВАН-і   18і       іSі  X іd  d  d    РАЗМЕР    d  d  d  d і
іНЫЙ BCD  і 10  і18 ЦИФРі і    і17 16 15  * * * * * * 3  2  1  0і
і         і     і       ГДБДДДДБДДБДДБДДБДДБДДБДДБДДБДДБДДБДДБДДґ
і         і     і       і79                                    0і
ГДДДДДДДДДЕДДДДДЕДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і         і     і       ГДВДДДДДДДВДДДДДДДДї                    і
і         і     і       іSіСМЕЩЕН.іМАНТИССАі                    і
і ОБЫЧНАЯ і  -38і       і іПОРЯДОКі        і                    і
і ТОЧНОСТЬі 10  і24 БИТАГДБДДДДДДДБДДДДДДДДЩ                    і
і         і     і       і31       23       0                    і
ГДДДДДДДДДЕДДДДДЕДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і         і     і       ГДВДДДДДДДДДДДДВДДДДДДДДДДДДДДДДї       і
і         і     і       і і СМЕЩЕННЫЙ  і                і       і
і ДВОЙНОЙ і -308і       іSі   ПОРЯДОК  і    МАНТИССА    і       і
і ТОЧНОСТИі10   і53 БИТАГДБДДДДДДДДДДДДБДДДДДДДДДДДДДДДДЩ       і
і         і     і       і63           32                0       і
ГДДДДДДДДДЕДДДДДЕДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і         і     і       ГДВДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДґ
іРАСШИРЕН-і-4932і       іSі   СМЕЩЕННЫЙ   ГДї     МАНТИССА      і
іНОЙ ТОЧ- і10   і64 БИТАі і    ПОРЯДОК    ііі                   і
іНОСТИ    і     і       ГДБДДДДДДДДДДДДДДДБДБДДДДДДДДДДДДДДДДДДДґ
і         і     і       і79             64 63                 0і
ГДДДДДДДДДБДДДДДБДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і                                                               і
і (1) S = БИТ ЗНАКА (0 = положительный, 1 = отрицательный)      і
і (2) d = ДЕСЯТИЧНАЯ ЦИФРА (ДВЕ НА ТИП)                         і
і      n                                                        і
і (3) X = БИТ, НЕ ИМЕЮЩИЙ ЗНАЧИМОСТИ; МАТЕМАТИЧЕСКИЙ СОПРОЦЕССОРі
і         ИГНОРИРУЕТ ЕГО ПРИ ЗАГРУЗКЕ И ОБНУЛЯЕТ ПРИ ХРАНЕНИИ   і
і (4)  = ПОЗИЦИЯ НЕЯВНОЙ ДВОИЧНОЙ ТОЧКИ                        і
і (5) і = ЦЕЛЫЙ БИТ МАНТИССЫ; ВРЕМЕННО ХРАНИТСЯ В ВЕЩЕСТВЕННОМ  і
і         ВИДЕ, НЕ ВЫДЕЛЯЕТСЯ В ФОРМАТАХ ОБЫЧНОЙ И ДВОЙНОЙ ТОЧ- і
і         НОСТИ                                                 і
і (6) СМЕЩЕННЫЙ ПОРЯДОК (НОРМАЛИЗОВАННОЕ ЗНАЧЕНИЕ)              і
і     ОБЫЧНЫЙ: 127 (7FH)                                        і
і     ДВОЙНОЙ: 1023 (3FFH)                                      і
і     РАСШИРЕННЫЙ ВЕЩЕСТВЕННЫЙ: 16383 (3FFFH)                   і
і                          s                                    і
і (7) УПАКОВАННЫЙ BCD: (-1) (D  ...D )                          і
і                             17    0                           і
і                       s  E BIAS                               і
і (8) ВЕЩЕСТВЕННЫЙ: (-1) (2      ) (F F ...)                    і
і                                    0 1                        і
і                                                               і
і                                                               і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
             Рисунок 15-10. Форматы Числовых Данных
15.2.2.2 Десятичные целые
----------------------------------------------------------------
Десятичные целые хранятся в упакованной десятичной нотации с
двумя десятичными цифрами, упакованными в каждый байт.
Исключение составляет только самый левый байт, который содержит
бит знака (0=положительное, 1=отрицательное). Отрицательные
числа не хранятся в форме дополнения в двоичной системе
счисления и отличаются от положительных чисел только битом
знака. Значащие цифры начинаются слева. Все цифры должны быть в
диапазоне 0-9.
Формат десятичных целых существует только в памяти. При
использовании модулем обработки операций с плавающей точкой
процессора i486, он автоматически переводится в 80-разрядный
расширенный вещественный формат. Все десятичные целые являются
точно представимыми в расширенном вещественном формате.
15.2.2.3 Вещественные числа
----------------------------------------------------------------
Процессор i486 может представлять вещественные числа формы:
(-1)**(s)2**(E)(b(0)b(1)b(2)b(3)...b(p-1))
где:
s     = 0 или 1
E     = любое целое между Emin и Emax, включительно
b(i)  = 0 или 1
p     = число бит точности
В Таблице 15-3 приведены параметры каждого из трех форматов
вещественных чисел.
Процессор i486 хранит вещественные числа в двоичном формате с
тремя полями, который отражает научную или экспоненциальную
нотацию. Формат состоит из следующих полей:
- Значащие цифры числа находятся в поле мантиссы
  b(0)b(1)b(2)b(3)...b(p-1).
- Поле порядка, e = E + смещенный порядок, располагает двоичную
  точку внутри значащих цифр (и определяет величину числа).
- Однобитовое поле знака указывает на то, является ли число
  положительным или отрицательным. Отрицательные числа
  отличаются от положительных только по биту знака своих
  мантисс.
                Таблица 15-3. Параметры Форматов
ЪДДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і                        і               Формат                 і
і        Параметр        ГДДДДДДДДДДДВДДДДДДДДДДДДДВДДДДДДДДДДДДґ
і                        і  Обычный  і   Двойной   іРасширенный і
ГДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДДДДДДЕДДДДДДДДДДДДґ
і Ширина формата в битах і     32    і        64   і      80    і
і p (биты точности)      і     24    і        53   і      64    і
і Ширина порядка в битах і      8    і        11   і      15    і
і Emax                   і   +127    і     +1023   і  +16383    і
і Emin                   і   -126    і     -1022   і  -16382    і
і Смещенный порядок      і   +127    і     +1023   і  +16383    і
АДДДДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДБДДДДДДДДДДДДДБДДДДДДДДДДДДЩ
На Таблице 15-4 показано как вещественное число 178.125
(десятичное) хранится в единичном вещественном формате. В
таблице приведена прогрессия эквивалентных нотаций, которая
выражает одно и тоже значение для того, чтобы показать как число
может быть переведено из одного формата в другой. (Трансляторы с
языка ассемблер ASM386/486 и PL/M-386/486 производят подобные
операции, когда они встречают вещественные числовые константы,
определенные программистом.) Обратите внимание на то, что не все
десятичние дроби имеют точный двоичный эквивалент. Десятичное
число 1/10, например, не может быть точно выражено в двоичном
формате (также как число 1/3 не может быть точно выражено в
десятичном формате). Когда транслятор встречает такое значение,
он делает аппроксимацию округленного двоичного числа из
десятичного значения.
Процессор i486 обычно хранит цифры мантиссы в нормализованной
форме. Это означает, что мантисса, исключая нулевое значение,
содержит целый бит и дробные биты:
1fff...ff
где  означает предполагаемую двоичную точку. Число дробных
битов варьируется в соответствии с вещественным форматом: 23 для
простого, 52 для двойного и 63 для расширенного вещественного.
Нормализуя вещественные числа так, чтобы их бит целой части
всегда был равен 1, процессор i486 уничтожает начальные нули в
малых значениях (іXі < 1). Этот прием максимизирует число
значащих цифр, которые могут быть представлены в мантиссе данной
ширины. Обратите внимание, что в простом и двойном форматах
бит целой части является неявным и в действительности не
хранится; бит целой части физически представлен только в
расширенном формате.
Если просмотреть только одни мантиссы с предполагаемой двоичной
точкой, то все нормализованные вещественные числа имели бы
значения большие чем или равные 1 и меньшие чем 2. Реальную
двоичную точку в значащих цифрах располагает поле порядка. Также
как в десятичной научной нотации, положительный порядок сдвигает
двоичную точку вправо, а отрицательнй порядок сдвигает двоичную
точку влево, вставляя начальные нули при необходимости.
Несмещенный порядок нуля указывает, что позиция предполагаемой
двоичной точки является также и позицией реальной двоичной
точки. Затем поле порядка определяет величину вещественного
числа.
           Таблица 15-4. Нотация Вещественного Числа
ЪДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і              і                                                і
і   Нотация    і                  Значение                      і
і              і                                                і
ГДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і   Обычная    і                                                і
і  Десятичная  і    178.125                                     і
ГДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і   Научная    і                                                і
і  Десятичная  і    178125E2                                   і
ГДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і   Научная    і                                                і
і  Двоичная    і    10110010001E111                            і
ГДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і   Научная    і                                                і
і  Двоичная    і    10110010001E10000110                       і
і(Смещ.Порядок)і                                                і
ГДДДДДДДДДДДДДДЕДДДДВДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДґ
і   Обычный    іЗнакіСмещенный Порядокі        Мантисса         і
і   Формат     ГДДДДЕДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДґ
і(Нормализован)і 0  і    10000110     і 01100100010000000000000 і
і              і    і                 і        1 (Неявно)      і
АДДДДДДДДДДДДДДБДДДДБДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДЩ
Для того, чтобы упростить сравнение вещественных чисел
(например, для сортировки), процессор i486 сохраняет порядки в
смещенной форме. Это означает, что константа добавляется к
истинному порядку, описанному выше. Как показано в Таблице 15-3,
значение смещения различно для каждого вещественного формата.
Оно выбрано так, чтобы вынудить смещенный порядок иметь
положительное значение. Это позволяет сравнивать два
вещественных числа (одинакового формата и знака) так, как если
бы они были двоичными целыми без знака. Таким образом, при
побитном сравнении чисел слева направо (начиная с самого левого
бита порядка), первый же отличный бит определяет отношение этих
чисел, поэтому нет необходимости вести сравнение дальше.
Истинный порядок числа может быть определен простым вычитанием
значения смещения его формата.
Простой и двойной вещественный форматы существуют только в
памяти. Если число, представленное в одном из этих форматов,
загружается в регистр модуля обработки операций с плавающей
точкой, то оно автоматически переводится в расширенный формат,
который используется для всех внутренних операций. Таким же
образом данные в регистрах могут быть переведены в простой и
двойной вещественный формат при сохранении в памяти. Расширенный
вещественный формат может быть использован также и в памяти,
обычно для хранения промежуточных результатов, которые не
помещаются в регистрах.
Большинство программных продуктов могут использовать двойной
формат для хранения числовых вещественных данных и результатов.
Он предоставляет достаточный диапазон и точность для получения
корректных результатов с минимальными затратами со стороны
программиста. Простой вещественный формат подходит для
программых продуктов, которые стеснены памятью, но следует
знать, что этот формат имеет малый запас надежности. Он также
используется для отладки алгоритмов, поскольку проблемы
округления будут выявлятся быстрее в этом формате. Расширенный
вещественный формат обычно используется для хранения
промежуточных результатов, счетчиков цикла и констант. Этот
формат имеет добавочную длину для того, чтобы оградить конечный
результат от действия округления и переполнения/отрицательного
переполнения в промежуточных вычислениях. При этом диапазон и
точность двойного формата адекватна большинству
микрокомпьютерных реализаций.
15.2.3 Управление округлением
----------------------------------------------------------------
Во внутреннем представлении модуль обработки операций с
плавающей точкой процессора i486 использует три дополнительных
бита (бит защиты, бит округления и бит подклейки), которые
применяются для округления чисел в соответствии с истинным
результатом бесконечной точности вычислений. Эти биты не
доступны для программиста. Всегда, когда адресат может
представить истинный результат бесконечной точности, модулю
обработки операций с плавающей точкой не надо производить
округление. Округление производится в арифметических операциях и
операциях сохранения, когда формат адресата не может точно
представить истинный результат с бесконечной точностью.
Например, вещественное число может быть округлено, если оно
сохраняется в более коротком вещественном формате или в
целочисленном формате. Истинный результат бесконечной точности
также может быть округлен при занесении в регистр.
Модуль обработки операций с плавающей точкой процессора i486
имеет четыре режима округления, устанавливаемые в поле
управления округлением (RC) управляющего слова (смотрите Рисунок
15-3). По данному истинному результату b, который не может быть
представлен нужным типом данных, модуль обработки операций с
плавающей точкой определяет два представимых числа a и c,
которые наиболее точно подходят к значению числа b с двух сторон
(a < b < c). Затем процессор округляет (изменяет) b на a или c в
соответствии с режимом, установленном в поле округления, как
показано в Таблице 15-5. Округление вносит в результат ошибку,
которая не больше чем единица в разряде, по которому велось
округление.
                Таблица 15-5. Режимы Округления
ЪДДДДДДДДДДДВДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
іПоле Управ-і    Режим     і                                    і
іленеия Окруі  Округления  і      Действия при Округлении       і
іглением    і              і                                    і
ГДДДДДДДДДДДЕДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і    00     іОкругление до і Определяем, к чему ближе b: к a илиі
і           іближайшего    і c; если число равноудалено от этих і
і           і              і чисел, то выбор четного числа (то, і
і           і              і у которого наименьший значащий бит і
і           і              і нулевой).                          і
ГДДДДДДДДДДДЕДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і    01     і  Округление  і                                    і
і           і    снизу     і      a                             і
і           і   (до -x)    і                                    і
ГДДДДДДДДДДДЕДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і    10     і  Округление  і                                    і
і           і    сверху    і      c                             і
і           і   (до +x)    і                                    і
ГДДДДДДДДДДДЕДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і    11     і  Отсечение   і Наименьшее из a или c              і
і           і   (до 0)     і                                    і
АДДДДДДДДДДДБДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
ОБРАТИТЕ ВНИМАНИЕ: a < b < c; a и c - успешно представимые числа;
                   b - не представимо.
- "Округление до ближайшего" - этот режим устанавливается по
  умолчанию и применим ко многим программным продуктам; он
  предоставляет наибольшую точность и статистически несмещенную
  оценку истинного результата.
- Режим "отсечения" или "округления до нуля" применим к
  целочисленным арифметическим операциям.
- "Округление в большую сторону" и "округление в меньшую
  сторону" называются ориентированным округлением и могут быть
  использованы для реализации интервальной арифметики.
  Интервальная арифметика используется для определения верхней и
  нижней границы для истинного результата многоступенчатых
  расчетов при округлении промежуточных результатов вычислений.
Управление округлением применимо только к арифметическим
операциям (список арифметических и неарифметических команд
приведен в Главе 16).
15.2.4 Управление точностью
----------------------------------------------------------------
Модуль обработки операций с плавающей точкой процессора i486
позволяет вычислять результат с точностью 64, 53 или 24 бита в
мантиссе, которая устанавливается в поле упраления точностью
(PC) управляющего слова. Изначально установленная точность, одна
из самых используемых в программных продуктах - точность 64-ре
бита в мантиссе, предоставляемая расширенным вещественным
форматом. Другие режимы точности являются обязательными в
соответствии со стандартом IEEE и предоставляются для
совместимости со спецификациями конкретных существующих
алгоритмических языков. Выбор меньшей точности не позволяет
использовать преимущества длинных дробей расширенного формата.
При выборе меньшей точности, округление дробных значений
обнуляет неиспользуемые биты справа. Управление точностью
применимо только к командам FADD, FSUB, FMUL, FDIV и FSQRT.


Яндекс цитирования