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