Внутренние регистры: Регистр управления FPU

Печать
Программирование - Архитектура и система команд микропроцессоров x86

 

Регистр управления CW (рис. 1.14.) предназначен для управления режимами работы сопроцессора. Он содержит ряд полей, значения которых влияют на точность результата, поведение процессора при встрече некорректных операндов и результатов и т.п.

 

Формат регистра управления FPU

Рис. 1.14. Формат регистра управления FPU

 

IC (Управление бесконечностью, бит 12: Intel287, 8087)

В сопроцессорах Intel287 и 8087 данный бит определяет, что +∞ и -∞ считаются одной беззнаковой бесконечностью (IC = 0) — проективная арифметика; или что +∞ и -∞ считаются двумя знаковыми бесконечностями (IC = 1) — аффинная арифметика.

В более поздних сопроцессорах, поддерживающих стандарт IEEE-754 (Intel387, Intel486, Pentium, …), данный бит, хотя и может программироваться, но не влияет на работу FPU — независимо от значения IC всегда применяется аффинная арифметика (-∞ < +∞).

 

RC (Управление округлением, биты 11, 10)

Поле RC определяет выбор одного из четырех методов округления результатов операций FPU:

  • 00 – округление к ближайшему (четному);
  • 01 – округление вниз (к -∞);
  • 10 – округление вверх (к +∞);
  • 11 – округление к нулю.

 

PC (Управление точностью, биты 9, 8)

Указывает точность представления результатов арифметических операций FADD, FADDP, FSUB, FSUBP, FSUBR, FSUBRP, FMUL, FMULP, FDIV, FDIVP, FDIVRFDIVRP и FSQRT. Доступны следующие режимы представления:

  • 00 – 24 бита мантисса, 7 бит порядок;
  • 01 – зарезервировано;
  • 10 – 53 бита мантисса, 10 бит порядок (двойная точность);
  • 11 – 64 бита мантисса, 15 бит порядок (расширенная точность).

На другие команды эти биты влияния не оказывают. Уменьшение точности может быть полезно для совместимости с ранними моделями арифметических сопроцессоров.

 

IEM (Запрет прерываний, бит 7: только для 8087)

В сопроцессоре 8087 этот бит маскирует флаг запроса прерывания IR, то есть, независимо от значений шести масок исключений, сигнал IEM = 1 запрещает генерацию прерываний при возникновении ошибок сопроцессора.

Во всех современных микропроцессорах (Intel287, Intel387, Intel486, …) бит 7 регистра CW зарезервирован.

 

PM, UM, OM, ZM, DM, IM (Маски исключений, биты 5, 4, 3, 2, 1, 0)

Биты содержат индивидуальные маски для каждой из шести исключительных ситуаций сопроцессора. Установка бита маски запрещает прерывание при возникновении соответствующей ошибки FPU (см. Исключения FPU). Каждому исключению соответствует свой бит маски:

При возникновении исключения, когда соответствующий бит маски сброшен, устанавливается соответствующий флаг в регистре состояния FPU и выдается сигнал прерывания, сообщающий процессору об ошибке сопроцессора. В случае, когда бит маски исключения установлен, внешний сигнал не выдается, но флаг все равно устанавливается. Таким образом, используя эффект накопления ошибок, программное обеспечение может замаскировать все исключения до выполнения групповых вычислений, затем произвести вычисления и проверить содержимое всех флагов для выяснения того, какие исключения имели место.