Умножение модулей двоично-десятичных чисел
Операция умножения сводится к образованию и многократному сложению частичных двоично-десятичных произведений.
Алгоритм выполнения операции состоит в следующем:
1. Сумма частичных произведений полагается равной нулю.
2. Анализируется очередная тетрада множителя, и множимое прибавляется к сумме частичных произведений столько раз, какова цифра, определяемая этой тетрадой.
3. Сумма частичных произведений сдвигается на одну тетраду, и повторяются действия, указанные в п. 2, пока все цифры (тетрады) множителя не будут обработаны. Направление сдвига зависит от того, какой вариант перемножения выбран – "старшие разряды вперед" или "младшие разряды вперед".
4. Каждая операция суммирования завершается десятичной коррекцией, соответствующей случаю суммирования двоично-десятичных чисел без избытка 6 (т.е. необходимо добавить 0110 к тем тетрадам, из которых был перенос или в которых f=1).
Пример.
Z = X * Y = 25(10) * 13(10)
= 325(10).
X = 25(10) = 0010 0101(2-10); Y = 13(10) = 0001 0011(2-10).
Для решения примера выберем вариант перемножения "старшие разряды вперед". В соответствии с п. 1 алгоритма полагаем сумму частичных произведений P0=0. (Частичные произведения будем обозначать Pi).
Формирование второго частичного произведения - более длительная операция, поскольку вторая анализируемая тетрада содержит 3(10), поэтому каждая операция суммирования требует проверки необходимости коррекции. Вычислим P2, последовательно суммируя слагаемые, образующие P2:
Таким образом, второе частичное произведение, состоящее из трех слагаемых, имеет вид
P2
= 0111 0101.
Теперь можно вычислить сумму первого и второго частичного произведений, т.е. результат:
Окончательный результат: Z = 0011 0010 0101(2-10)
= 325(10).
Следует отметить, что в данном случае при суммировании операндов не возникало переносов, поэтому коррекция осуществлялась только по признаку f=1.