logo
несколько программ / bsp33

Регистр управления

Регистр управления для сопроцессора 8087 показан на рисунке 10.7.

Рис. 10.7. Формат регистра управления для сопроцессора 8087

Регистр управления сопроцессоров 80287/80387 и сопроцессора, входящего в состав более современных процессоров, имеет аналогичный формат, за исключением того, что бит 7 в нем не используется (рис. 10.8).

Рис. 10.8. Формат регистра управления для современных сопроцессоов

Биты 0...5 - маски особых случаев. Особые случаи иногда возникают при выполнении команд сопроцессора, например, при делении на нуль, переполнении и так далее.

Если все биты масок особых случаев равны нулю, особый случай вызывает прерывание центрального процессора INT 10h (обратите внимание, что это прерывание используется BIOS для работы с дисплейным адаптером). Если же особые случаи замаскированы установкой соответствующих бит в единичное состояние, прерывание не вырабатывается, а в качестве результата возвращается особое значение - бесконечность, нечисло и так далее.

Приведем таблицу масок особых случаев:

Маска

Особый случай

IM

Недействительная операция

DM

Денормализованный результат

ZM

Деление на нуль

OM

Переполнение

UM

Антипереполнение

PM

Особый случай при неточном результате

IEM

Маскирование одновременно всех особых случаев вне зависимости от установки бит 0-5 регистра управления. Этот бит действителен только для сопроцессора 8087

Подробнее особые случаи и условия их возникновения будут описаны позже, когда мы займемся ошибками при выполнении команд в сопроцессоре.

Поле PC управляет точностью вычислений в сопроцессоре:

Поле

Описание

00

Использование расширенной точности. Этот режим устанавливается при инициализации сопроцессора

10

Округление результата до двойной точности

11

Округление результата до одинарной точности

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

Двух битовое поле RC задает режим округления при выполнении операций с вещественными числами:

Поле

Описание

00

округление к ближайшему числу, этот режим устанавливается при инициализации сопроцессора

01

округление в направлении к отрицательной бесконечности

10

округление в направлении к положительной бесконечности

11

округление в направлении к нулю

Ниже демонстрируются перечисленные выше режимы округления. Символами "o" обозначены точные значения вещественных чисел, символами "x" приближенные значения. Стрелки "<<" и ">>" указывают направление округления. В центре линии расположен нуль числовой оси, на ее левом и правом конце - отрицательная и положительная бесконечности.

-беск.<-o-<<-x-------o---- 0 -----o-----x->>--o---->+беск.

-беск.<-o-<<-x-------o---- 0 -----o---<<----x-o---->+беск.

-беск.<-o-x-->>------o---- 0 -----o------x->>-o---->+беск.

-беск.<-o-x-->>------o---- 0 -----o---<<----x-o---->+беск.

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

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

Поле IC регистра управления предназначен для управления бесконечностью и может иметь два значения:

В проективном режиме существует только одна бесконечность, она не имеет знака. В афинном режиме имеется две бесконечности - положительная и отрицательная.

Афинный режим допускает выполнение многих операций с бесконечностями - сложение, умножение и так далее.