Умножение двоично-десятичных чисел

Как известно, умножение чисел сводится к суммированию частичных произведений, полученных при умножении текущего разряда множителя В на множимое Л. Для двоичных чисел частичные произведения равны множимому или нулю. Поэтому умножение двоичных чисел сводится к последовательному суммированию частичных произведений со сдвигом. Для десятичных чисел частичные произведения могут принимать 10 различных значений, включая нуль. Поэтому для получения частичных произведений вместо умножения может быть использовано многократное последовательное суммирование множимого Л. Для иллюстрации алгоритма умножения десятичных чисел воспользуемся примером.

Пример 2.26. Па рис. 2.15, а приведено умножение целых десятичных чисел Л х б = 54 х 23, начиная с младшего разряда множителя. Для умножения используется следующий алгоритм:

• за исходное состояние принимается 0. Первая сумма получается прибавлением к нулю множимого Л = 54. Затем к первой сумме снова прибавляется множимое А = 54. И наконец, после третьего суммирования получается первое частичное произведение, равное 0'+ 54 + 54 + 54 = 162;

Алгоритм умножения целых десятичных чисел 54 х 23 (а) и принцип его реализация (б)

Рис. 2.15. Алгоритм умножения целых десятичных чисел 54 х 23 (а) и принцип его реализация (б)

  • • выполняется сдвиг первого частичного произведения на один разряд вправо (или множимого влево);
  • • к старшим разрядам первого частичного произведения дважды прибавляется множимое: 16 + 54 + 54 = 124;
  • • после объединения полученной суммы 124 с младшим разрядом 2 первого частичного произведения находится произведение 1242.

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

Пример 2.27. Пусть в регистре Rt постоянно хранится множимое А = 54. В исходном состоянии в регистр R2 помещаем множитель В = 23, а регистр R3 загружаем нулями. Для получения первого частичного произведения (162) к содержимому регистра трижды прибавляем множимое А = 54, уменьшая при этом каждый раз на единицу содержимое регистра RT После того как младший разряд регистра R., станет равным нулю, произведем сдвиг вправо на один разряд содержимого обоих регистров /?., и R.,. Наличие 0 в младшем разряде R2 в свидетельствует о том, что формирование частичного произведения завершено и необходимо произвести сдвиг. Затем выполним две операции сложения множимого А = 54 с содержимым регистра и вычитания единицы из содержимого регистра R0. После второй операции младший разряд регистра R., станет равным нулю. Поэтому, выполнив сдвиг вправо на один разряд содержимого регистров R3 и RY получим искомое произведение Р = 1242.

Реализация алгоритма умножения десятичных чисел в двоично-десятичных кодах (рис. 2.16) имеет особенности, связанные с выполнением операций сложения и вычитания

Реализация алгоритма умножения десятичных чисел в двоично-десятичных кодах

Рис. 2.16. Реализация алгоритма умножения десятичных чисел в двоично-десятичных кодах

(см. параграф 2.3), а также сдвига тетрады на четыре разряда. Рассмотрим их в условиях примера 2.27.

Пример 2.28. Умножение чисел с плавающей точкой. Для получения произведения чисел А и В с плавающей точкой необходимо определить Мс = Мл х Мн , Рс = Р{ + Рн. При этом используются правила умножения и алгебраического сложения чисел с фиксированной точкой. Произведению присваивается знак "+", если множимое и множитель имеют одинаковые знаки, и знак "-", если их знаки разные. При необходимости выполняется нормализация результирующей мантиссы с соответствующей коррекцией порядка.

Пример 2.29. Умножение двоичных нормализованных чисел:

При выполнении операции умножения могут иметь место особые случаи, которые обрабатываются специальными командами процессора. Например, если один из сомножителей равен нулю, операция умножения не выполняется (блокируется) и сразу формируется нулевой результат.

 
< Пред   СОДЕРЖАНИЕ     След >