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



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

Регистр управления для сопроцессора 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округление результата до одинарной точности.

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

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

В проективном режиме существует только одна бесконечность, она не имеет знака: Бесконечность -----------------> <-----------------¬ ¦ ¦ ¦ ¦ ¦ ¦ L---------------- 0 ------------------

В афинном режиме имеется две бесконечности - положительная и отрицательная:
-бесконечность + бесконечность <-------------------------- 0 ---------------------------->

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



Содержание раздела