Регистр управления для сопроцессора 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 |
Округление результата до одинарной точности |
Искусственное ухудшение точности вычислений не приводит к ускорению работы программы. Режимы с пониженной точностью предназначены для эмуляции процессоров, использующих двойную и одинарную точность, соответственно.