Национальный исследовательский ядерный университет «МИФИ»
Опубликован: 30.03.2005 | Доступ: свободный | Студентов: 8223 / 2598 | Оценка: 4.17 / 4.05 | Длительность: 09:46:00
ISBN: 978-5-9556-0040-6
Специальности: Разработчик аппаратуры
Лекция 8:

Модифицированные коды

< Лекция 7 || Лекция 8: 123 || Лекция 9 >

Умножение чисел со старших разрядов в прямом коде

Пусть два числа X и Y представлены с фиксированной запятой в виде:

[X]пк = sign X.x1x2...xn – множимое
[Y]пк = sign Y.y1y2...yn – множитель

Представим множитель в виде:

[Y]пк = sign Y. (y1*2-1 + y2*2-2 + ... + yn*2-n)

Тогда:

[Z]пк = [X]пк*[Y]пк = sign Z. |X| (y1*2-1 + y2*2-2 + ... + yn*2-n) = 
= sign Z. (|X|*y1*2-1 + |X|*y2*2-2 + ... + |X|*yn*2-n) =
= sign Z. (|X|*2-1*y1 + |X|*2-2*y2 + ... + |X|*2-n*yn)

Это есть аналитическая запись алгоритма умножения двух чисел, начиная со старших разрядов множителя.

Алгоритм:

  • Множимое сдвигается вправо на 1 разряд
  • Анализируется цифра множителя. Если она – нуль, то частичное произведение не суммируется, а если она – единица, то частичное произведение добавляется к общему результату.
  • Последовательность операций по пунктам 1 и 2 продолжается "n" раз.
  • Знак произведения находится независимо от получения цифровой части по формуле:

    sign\ Z = sign\ X \oplus  sign\ Y

Пример:


Видно, что в общем случае нужно иметь для точного результата сетку с числом разрядов, равным сумме разрядностей сеток сомножителей.

Если нужно получать произведение с точностью не хуже, чем 2-n, то достаточно иметь не удвоенную величину разрядной сетки, а лишь увеличенную на

d = log2n разрядов

Умножение с младших разрядов в прямом коде

Напишем выражение для произведения двух чисел в несколько изменённом виде, а именно:

[Z]пк = [X]пк*[Y]пк = 
= sign Z.(|X|*y1*2-1 + |X|*y2*2-2 +... + |X|*yn*2-n) =
= sign Z.( |X|*2-1*y1 + 2-1 (|X|*2-1*y2 + 2-1 (|X|*2-1*y3 + (...)))) =
= sign Z. ((...(( |X|*yn*2-1 + |X|*yn-1)2-1 + |X|*yn-2)2-1 + ... +
  + |X|*y2 )2-1 + |X|*y1 )*2-1

Это выражение называется преобразованием по схеме Горнера и задаёт алгоритм умножения с младших разрядов множителя.

Таким образом, для умножения должна выполняться следующая последовательность действий:

  • Анализируется младшая цифра множителя. Если она равна "1", то множимое участвует в формировании части произведения. В противном случае – не участвует.
  • Полученное частичное произведение сдвигается вправо на 1 разряд.
  • Операции по пунктам 1 и 2 выполняются до старшего разряда.

Пример:


sign\ Z= 1 \oplus  1 = 0\\
Z_{пк} = 0.10000100
Замечание.

Для получения произведения с точностью не ниже, чем 2-n нужно иметь только "n"– разрядную сетку.

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

Однако, известно, что числа могут быть представлены в различных кодах(это, прежде всего, отрицательные числа).

Мы уже знаем, как выполняется операция суммирования чисел (в том числе и с разными знаками).

Однако микрооперация сдвига имеет некоторые особенности:


Сдвиг вправо:


Сдвиг влево возможен только в случае, если сдвинутое число меньше единицы по модулю:

Исходные числа:


< Лекция 7 || Лекция 8: 123 || Лекция 9 >
Жаксылык Несипов
Жаксылык Несипов
Людмила Долгих
Людмила Долгих

Здравствуйте. В первой лекции курса "Логические и арифметические основы и принципы работы ЭВМу вас приведена классическая структурная схема ЭВМ. Если можно уточните, а как в классической архитектуре могла реализоваться прямая работа устройств ввода-вывода с оперативной памятью?  Если я правильно понимаю - это режим прямого доступа к памяти, в классической архитектуре он не предусмотрен.