Регистр управления для сопроцессора 8087 показан на следующем рисунке:
15-13 12 11-10 9-8 7 6 5 4 3 2 1 0 ---------T-T-----T-----T---T---T---T---T---T---T---T---¬ ¦XXXXXXXX¦IC¦ RC ¦ PC ¦IEM¦XXX¦PM ¦UM ¦OM ¦ZM ¦DM ¦IM ¦ L--------+--+-----+-----+---+---+---+---+---+---+---+----
Регистр управления сопроцессоров 80287/80387 и сопроцессора, входящего в состав процессора 80486, имеет аналогичный формат, за исключением того, что бит 7 в нем не используется:
15-13 12 11-10 9-8 7-6 5 4 3 2 1 0 ---------T-T-----T-----T--------T---T---T---T---T---T---¬ ¦XXXXXXXX¦IC¦ RC ¦ PC ¦XXXXXXXX¦PM ¦UM ¦OM ¦ZM ¦DM ¦IM ¦ L--------+--+-----+-----+--------+---+---+---+---+---+----
Биты 0...5 - маски особых случаев. Особые случаи иногда возникают при выполнении команд сопроцессора, например, при делении на нуль, переполнении и т.д. Если все биты масок особых случаев равны нулю, особый случай вызывает прерывание центрального процессора INT 10h (обратите внимание, что это прерывание используется BIOS для работы с дисплейным адаптером). Если же особые случаи замаскированы установкой соответствующих битов в единичное состояние, прерывание не вырабатывается, а в качестве результата возвращается особое значение - бесконечность, нечисло и т.д.
Приведем таблицу масок особых случаев:
IM | маска недействительной операции; |
DM | маска денормализованного результата; |
ZM | маска деления на нуль; |
OM | маска переполнения; |
UM | маска антипереполнения; |
PM | маска особого случая при неточном результате; |
IEM | маскирование одновременно всех особых случаев вне зависимости от установки битов 0...5 регистра управления, этот бит действителен только для сопроцессора 8087 |
Подробнее особые случаи и условия их возникновения будут описаны позже, когда мы займемся ошибками при выполнении команд в сопроцессоре.
Поле PC управляет точностью вычислений в сопроцессоре:
00 | использование расширенной точности, этот режим устанавливается при инициализации сопроцессора; |
10 | округление результата до двойной точности; |
00 | округление результата до одинарной точности. |
00 | округление к ближайшему числу, этот режим устанавливается при инициализации сопроцессора; |
01 | округление в направлении к отрицательной бесконечности; |
10 | округление в направлении к положительной бесконечности; |
11 | округление в направлении к нулю. |