Для наглядности, в табл. 16.3–16.5 показаны все три режима работы детектора порядка. В таблицах приняты следующие условные обозначения: S - знаковый бит, N - знаковый бит, D - незначащий бит.
Таблица 16.3 Детектор порядка в режиме работы HI
| Старший байт | Младший байт | Степень |
|---|---|---|
| SNDDDDDD | DDDDDDDD | 0 |
| SSNDDDDD | DDDDDDDD | -1 |
| SSSNDDDD | DDDDDDDD | -2 |
| SSSSNDDD | DDDDDDDD | -3 |
| SSSSSNDD | DDDDDDDD | -4 |
| SSSSSSND | DDDDDDDD | -5 |
| SSSSSSSN | DDDDDDDD | -6 |
| SSSSSSSS | NDDDDDDD | -7 |
| SSSSSSSS | SNDDDDDD | -8 |
| SSSSSSSS | SSNDDDDD | -9 |
| SSSSSSSS | SSSNDDDD | -10 |
| SSSSSSSS | SSSSNDDD | -11 |
| SSSSSSSS | SSSSSNDD | -12 |
| SSSSSSSS | SSSSSSND | -13 |
| SSSSSSSS | SSSSSSSN | -14 |
| SSSSSSSS | SSSSSSSS | -15 |
Таблица 16.4 Детектор порядка в режиме работы HIX
| Флаг AV | Старший байт | Младший байт | Степень |
|---|---|---|---|
| 1 | DDDDDDDD | DDDDDDDD | +1 |
| 0 | SNDDDDDD | DDDDDDDD | 0 |
| 0 | SSNDDDDD | DDDDDDDD | -1 |
| 0 | SSSNDDDD | DDDDDDDD | -2 |
| 0 | SSSSNDDD | DDDDDDDD | -3 |
| 0 | SSSSSNDD | DDDDDDDD | -4 |
| 0 | SSSSSSND | DDDDDDDD | -5 |
| 0 | SSSSSSSN | DDDDDDDD | -6 |
| 0 | SSSSSSSS | NDDDDDDD | -7 |
| 0 | SSSSSSSS | SNDDDDDD | -8 |
| 0 | SSSSSSSS | SSNDDDDD | -9 |
| 0 | SSSSSSSS | SSSNDDDD | -10 |
| 0 | SSSSSSSS | SSSSNDDD | -11 |
| 0 | SSSSSSSS | SSSSSNDD | -12 |
| 0 | SSSSSSSS | SSSSSSND | -13 |
| 0 | SSSSSSSS | SSSSSSSN | -14 |
| 0 | SSSSSSSS | SSSSSSSS | -15 |
Таблица 16.5 Детектор порядка в режиме работы LO
| Флаг SS | Старший байт | Младший байт | Степень |
|---|---|---|---|
| S | DDDDDDDD | DDDDDDDD | -15 |
| S | SNDDDDDD | DDDDDDDD | -16 |
| S | SSNDDDDD | DDDDDDDD | -17 |
| S | SSSNDDDD | DDDDDDDD | -18 |
| S | SSSSNDDD | DDDDDDDD | -19 |
| S | SSSSSNDD | DDDDDDDD | -20 |
| S | SSSSSSND | DDDDDDDD | -21 |
| S | SSSSSSSN | DDDDDDDD | -22 |
| S | SSSSSSSS | NDDDDDDD | -23 |
| S | SSSSSSSS | SNDDDDDD | -24 |
| S | SSSSSSSS | SSNDDDDD | -25 |
| S | SSSSSSSS | SSSNDDDD | -26 |
| S | SSSSSSSS | SSSSNDDD | -27 |
| S | SSSSSSSS | SSSSSNDD | -28 |
| S | SSSSSSSS | SSSSSSND | -29 |
| S | SSSSSSSS | SSSSSSSN | -30 |
| S | SSSSSSSS | SSSSSSSS | -31 |
Источниками входных данных в устройстве сдвига могут служить регистры SI, AR, MR0, MR1, MR2, SR0 и SR1. Результат работы устройства сдвига всегда помещается в регистр SR (SR0, SR1).
Команды устройства сдвига
Как было сказано выше, устройство сдвига выполняет следующие функции:
• Арифметический сдвиг (ASHIFT)
• Логический сдвиг (LSHIFT)
• Нормализация числа (NORM)
• Определение экспоненты (ЕХР)
• Блочное изменение экспоненты (EXPADJ)
Данные команды устройства сдвига применяются при выполнении арифметических операций над числами. С их помощью производится определение порядка блока, немедленные сдвиги, нормализация и денормализация чисел.
Ниже приводится полный список команд устройства сдвига Shifter в соответствии с принятыми ранее условными сокращениями. Назначение команд приводится в тексте описания этих команд и комментариях для некоторых из команд.
Команды арифметического сдвига:
[IF cond] SR = |SR OR| ASHIFT xop |(HI)|;
|(LO)|
Команды логического сдвига:
[IF cond] SR = |SR OR| LSHIFT xop |(HI)|;
|(LO)|
Команды нормализации:
[IF cond] SR = |SR OR| NORM xop |(HI)|;
|(LO)|
Команды выделения порядка:
[IF cond] SR = EXP xop |(HI) |;
|(LO) |
|(HIX)|
Команды выравнивания блочного порядка:
[IF cond] SR = EXPADJ xop;
Команды арифметического непосредственного сдвига:
[IF cond] SR = |SR OR| ASHIFT xop BY <exp> |(HI)|;
|(LO)|
Команды логического непосредственного сдвига:
[IF cond] SR = |SR OR| LSHIFT xop BY <exp> |(HI)|;
|(LO)|
В записях некоторых команд присутствуют символы, которые имеют следующее назначение:
HI - сдвиг выполняется относительно старших 16 разрядов (SR1);
LO - сдвиг выполняется относительно младших 16 разрядов (SR0);
HIX - расширенный режим HI (при выделении порядка учитывается бит переполнения AV).
Например, команда:
SE=EXP AR (HIX);
означает, что в регистр SE будет занесен результат выделения порядка из регистра AR в расширенном режиме, т.е. с учетом бита переполнения AV.
Команда:
SR=NORM AR (HI); {Нормализация}
означает, что в регистр SR будет занесен результат нормализации регистра AR, причем сдвиг при нормализации будет выполняться относительно старших 16 разрядов.
Для всех команд устройства сдвига разрешено использовать следующие операнды xop: SI, SR0, SR1, AR, MR0, MR1, MR2, а в качестве ЕХР может быть любое целое число от -128 до 127.
Коды условия IF соответствуют кодам, приведенным ранее в табличном виде.
Ниже приведен пример программы для вычисления разницы двух чисел в формате с плавающей точкой, с применением устройства сдвига.
.MODULE float_point_sub;
{
Программный модуль вычисления z = x - y в формате с плавающей точкой
Входные операнды:
AX0 = показатель x, АХ1 = мантисса x, AY0 = показатель y, AY1 = мантисса y.
Выходные данные: AR = показатель z, SR1 = мантисса z
Изменяются регистры: AX0,AY1,AY0,AF,AR,SI,SE,SR
Время вычисления = 11 циклов
}
.ENTRY fps;
fps : AF=AX0-AY0; {Показатель x > показателя y?}
IF GT JUMP shifty; {Если да - переход на сдвиг y}
SI=AX1, AR=PASS AF; {Иначе - сдвиг x}
SE=AR;
SR=ASHIFT SI (HI);
AR=SR1-AY1; {Вычисление мантиссы}
JUMP subt;
shifty: SI=AY1, AR=-AF; SE=AR;
SR=ASHIFT SI (HI);
AY1=SR1;
AY0=AX0, AR=AX1-AY1; {Вычисление мантиссы}
subt: SE=EXP AR (HIX);
AX0=SE, SR=NORM AR (HI); {Нормализация}
AR=AX0+AY0; {Вычисление показателя}
RTS;
.ENDMOD;
Данная программа содержит многофункциональные команды, что позволило сократить время ее работы. Программа выполняется всего за 11 машинных циклов процессора.