Методы ускоренного умножения принято делить на аппаратные и логические. Как те, так и другие, требуют дополнительные затраты оборудования. При использовании аппаратных методов дополнительные затраты оборудования прямо пропорциональны числу разрядов в операндах. Эти методы вызывают усложнение схемы операционного аппарата АЛУ.
При реализации логических методов ускорения умножения усложняется схема управления АЛУ.
К аппаратным методам ускорения относятся ускорение выполнения операций сложения и сдвига, введение дополнительных цепей сдвига, позволяющих за один такт производить запись информации в регистрах сразу на несколько разрядов, совмещение во времени операций сложения и сдвига, построение комбинационных схем множительных устройств, реализующих «табличное» и «матричное» умножение.
При матричном умножении частичные произведения формируются на схемах n-разрядных конъюнкторов одновременно и подаются на входы n-входового сумматора, причем в сумматоре за счет соответствующей коммутации цепей осуществляются сдвиги частичных произведений. На выходе сумматора получается 2n-разрядное произведение.
Метод табличного умножения позволяет получить произведение за один такт при условии, что вся таблица умножения будет размещена в памяти. Для этого понадобится запоминающее устройство объемом 22n 2n-разрядных слов. Для организации 8-разрядного умножителя потребуется память объемом 216х16 бит. Для 16-разрядного АЛУ умножитель потянет на 232х32 бит = 16 Гбайт.
Если используется процессор с большой разрядностью, то можно воспользоваться таблицей умножения меньшей разрядности, получая с ее помощью частичные произведения, а потом просуммировать их, предварительно сдвинув на соответствующее число разрядов.
Пусть n – четное. Тогда каждый из двух сомножителей можно представить конкатенацией двух полей одинаковой разрядности n/2: A=AhAl, B=BhBl.
Тогда .
Пусть требуется перемножить 4-хразрядные числа без знака. Построим таблицу умножения двухразрядных чисел.
01 х 01 = 0001 10 х 10 = 0100
01 х 10 = 0010 10 х 11 = 0110
10 х 11 = 0011 11 х 11 = 1001
Пример 30.Перемножить 6х10 в двоичной системе счисления и результат перевести в десятичную систему.
6(10)=0110(2), 10(10)=1010(2) .
Числа четырехразрядные. Разобьем записи этих чисел на 2 группы двухразрядных чисел.
01.10 х 10.10 = ?
И перемножим каждую группу одного числа на каждую группу другого числа, используя приведенную выше таблицу умножения двухразрядных двоичных чисел.
Al x Bl = 10 x 10 = 0100
Al x Bh= 10 x 10 = 0100
Ah x Bl = 01 x 10 = 0010
AhxBh= 01 x10 = 0010
+ 0100
+ 0100
+ 0010
0010_____
Т.е. 0110 х 1010 = 00111100, а переведя результат в десятичную систему, получим 60.
Пример 31. Перемножить 7х11 в двоичной системе счисления и результат перевести в десятичную систему.
7(10)=0111(2), 11(10)=1011(2) .
Числа четырехразрядные. Разобьем записи этих чисел на 2 группы двухразрядных чисел.
01.11 х 10.11 = ?
И перемножим каждую группу одного числа на каждую группу другого числа, используя приведенную выше таблицу умножения двухразрядных двоичных чисел.
Al x Bl = 11 x 11 = 1001
Al x Bh= 11 x 10 = 0110
Ah x Bl = 01 x 11 = 0011
AhxBh= 01 x10 = 0010
+ 1001
+ 0110
+ 0011
0010_____
Т.е. 0111 х 1011 = 01001101, а переведя результат в десятичную систему, получим 77.
Среди логических методов наиболее распространены в настоящее время методы, позволяющие за один шаг умножения обработать несколько разрядов множителя. Рассмотрим способ умножения на 2 разряда, начиная с младших (таблица 2).
Таблица 2 Способ умножения на 2 разряда
Комбинация
Действие
Добавление
Сдвиг-Сдвиг
Сложение-Сдвиг-Сдвиг
А
Сдвиг-Сложение-Сдвиг
2А
Сложене-Сдвиг-Сложение-Сдвиг
3А=4А-А
Задания.Перемножитьчисла с фиксированной запятой в прямом коде:
1) A=0,1101, B=-0,0011
2) A=-0,0101, B=-0,0110
3) A=-0,0101, B=0,0101
4) A=0,0011, B=-0,0000
5) A=0,1101, B=0,0101
6) A=-0,1101, B=-0,1000
7) A=0,0111, B=0,1001
8) A=-0,0111, B=-0,1001
9) A=-0,1011, B=-0,0101.
Алгоритмы деления
Деление двоичных чисел со знаком также удобнее проводить в прямом коде. Так как знак частного не зависит от соотношения модулей операндов и определяется в зависимости от знаков операндов, он определяется так же, как и при умножении, следующими соотношениями:
.
Рассмотрим процесс деления модулей двоичных чисел.
Пусть A– делимое, B– делитель, C– частное, W– остаток, и т.к. числа дробные, то |A|<|B|, иначе C≥1, что соответствует переполнению разрядной сетки.