Этот алгоритм разработан Бутом и является универсальным для умножения чисел в дополнительном коде. Сомножители участвуют в операции со знаковыми разрядами, которые рассматриваются как цифровые разряды числа. Результат получается сразу в дополнительном коде со знаком.
В процессе умножения анализируются две смежные цифры множителя: та, на которую выполняется умножение в данном такте, – m1 и соседняя младшая цифра – m2. В двоичном множителе этой паре цифр «m1m2» соответствуют четыре возможных набора – «00», «01», «10», «11», каждый из которых требует выполнения следующих действий:
1) набор «01» требует сложения множимого с предыдущей суммой частичных произведений;
2) набор «10» требует вычитания множимого из предыдущей суммы частичных произведений;
3) наборы «00» и «11» не требуют ни сложения, ни вычитания, так как частичное произведение равно нулю.
В цикле умножения в каждом такте выполняются соответствующие сдвиги на один разряд. При этом могут использоваться все четыре способа умножения с некоторыми особенностями:
- в I способе не следует выполнять последний сдвиг суммы частичных произведений;
- в IV способе не выполняется первый сдвиг множимого.
Эти особенности объясняются тем, что в этих тактах реализуется умножение не на цифровой, а на знаковый разряд числа.
Кроме того, при выполнении алгоритма умножения с автоматической коррекцией следует помнить о правилах сдвига отрицательных чисел в ДК.
Пример 6. Перемножить числа А=-18(10)=-10010(2); В=27(10)=11011(2), представив их в ДК, применить алгоритм с автоматической коррекцией и выполнить умножение I и IV способами.
М=25
АПК =1,10010
АДК=1,01110
- множимое
ВПК =0,11011
ВДК=0,11011
- множитель
IV способ умножения Таблица
Множитель
Множимое
Сумма ЧП
Пояснения
0,11011
1,0111000000
0,0000000000
1,0111000000
1,0111000000
Сложение
1,10110
1,1011100000
Сдвиги
1,01100
1,1101110000
1,0111000000
0,0010010000
Сдвиги
1,1001010000
Вычитание
0,11000
1,1110111000
1,1001010000
1,1110111000
Сдвиги
11,1000001000
Сложение
1,10000
1,1111011100
Сдвиги
1,00000
1,1111101110
1,1000001000
0,0000010010
Сдвиги
0,00000
1,111111011
1,1000010010
Вычитание
Сдвиги
Получено произведение в дополнительном коде:
(А×В)ДК=1,1000011010.
Проверка результата. Масштаб произведения МА×МВ=210.
(А×В)ПК=1,0111100110 (х210).
А×В=-111100110(2)=-486(10).
Выполним умножение I способом и обратить внимание на необходимость сохранения предыдущей цифры множителя при сдвиге его вправо (в первом такте соседней младшей цифрой всегда является «0»).Аналогично следует поступать при умножении II способом.
I способ умножения Таблица
Множитель
Сумма ЧП
Пояснения
0,110110
0,0000000000
0,10010
0,1001000000
Вычитание
0,011011
0,0100100000
Сдвиги
0,001101
0,0010010000
1,01110
Сдвиги
1,1001010000
Сложение
0,000110
1,1100101000
0,10010
Сдвиги
10,0101101000
Вычитание
0,000011
0,0010110100
Сдвиги
0,000001
0,0001011010
1,01110
Сдвиги
1,1000011010
Сложение
Нет последнего сдвига!
Получено произведение в дополнительном коде:
(А×В)ДК=1,1000011010.
Проверка результата. Масштаб произведения МА×МВ=210.