logo
КС-ZAO / Лекции ЦЭВМруский вариант11

Денормализация

Денормализацией называется сдвиг числа, осуществляемый по установлен­ному порядку. В действительности, эта операция представляет собой преобразо­вание числа с плавающей точкой в число с фиксированной точкой.

Денормализация требует выполнения определенной последовательности операций. Во-первых, регистр SE должен содержать значение порядка. Это значе­ние или загружается непосредственно или может быть результатом некоторой предыдущей операции. Далее, при выполнении самого сдвига величина сдвига берется из регистра SE, а не из данных.

Ниже приведены два примера денормализации числа с двойной точнос­тью. В первом показана денормализация, при которой первыми сдвигаются стар­шие биты числа, затем младшие. Так как результат может вычисляться в любом порядке, то следующий пример демонстрирует другой порядок выполнения той же операции, то есть, когда первыми сдвигаются младшие биты.

Всегда выбирайте арифметический сдвиг для старших бит (HI) входного значения в дополнительном коде (или логический сдвиг для беззнакового входного значения). Подобным образом, для бит, обрабатываемых первыми, не используйте модификатор [SR OR].

Модификатор». = HI, нет [SR OR] Операция сдвига = арифметический, SE = -3 Первая половина входного 10110110 10100011 (старшие биты требуемого значения результата)

SR 11110110 11010100

Oil 00000 00000000

Теперь обрабатываются младшие биты. Для младших бит входного значе­ния всегда выбирайте логический сдвиг. Подобным образом, для битов, обрабатываемых во вторую очередь, используется модификатор [SR OR], чтобы избежать перезаписывания только что обработанной первой части результата.

Модификатор» = LO, [SR OR] Операция сдвига = логический, SE = -3

Вторая половина входного 00110110 01011101 (младшие биты требуемого значения результата)

SR 111110110 11010100011 0111011001011

Теперь то же значение обрабатывается в обратном порядке. Старшие би­ты всегда сдвигаются арифметически, а младшие биты логически. Первая полови­на входного значения непосредственно передается в SR, а вторая - подвергается операции OR, чтобы получить в SR число с двойной точностью.

Модификатор = LO, нет [SR OR] Операция сдвига = логический, SE = -3 Первая половина входного 0111011001011101 (младшие биты требуемого значения результата)

SR 00000000 00000000 000 OHIO 11001011

Модификаторы = HI, [SR OR] Операция сдвига = арифметический, SE = -3 Вторая половина входного 10110110 10100011 (старшие биты требуемого значения результата)

SR 111101101101010001101110 11001011