Умножения в дополнительных кодах без применения коррекции.
Примечание.
Умножения в дополнительных кодах с применением коррекции.
Правильный результат получается только при положительных операндах.
С = [Aпр.]×[Bпр.]
При А<0, B>0 получаем псевдо-произведение:
С* = [Aдоп.]·[Bпр.] = [2n - |A|]·[Bпр.] = 2n ·Bпр. - |A| ·Bпр.
Должно быть: C = 22n - |A| · Bпр.
При A>0, B<0: Апр.· [2n - |В|] = 2n · Апр - Апр·|В|
Должно быть: C = 22n - Апр·|В|
При A>0, B<0: (2n - |A|)·(2n - |В|) = 22n - 2n·|В| - 2n·|А| + |A| · |В|
Должно быть: C = |A| · |В|
Два вида коррекции
1. Коррекция окончательного результата состоит в вычитании множимого из старших разрядов СЧП, которое может быть заменено на сложение с дополнением множимого. Эта коррекция проводится при отрицательном множителе.
2. При отрицательном множимом коррекция проводится во время умножения и сводится к модифицированному сдвигу СЧП (при сдвиге СЧП вправо в свободный разряд заносится единица).
В случае отрицательного множимого (A<0,B>0) при умножении на младшие нули проводится обычный (не модифицированный) сдвиг – в свободный разряд заносится 0.
|
|
Пример. А = 15, В = 13, n = 5.
[Aпр.] = 1.1111 [Bпр.] = 0.1101
[Aдоп.] = 1.0001
а) А<0, B>0:
№ шага | Операнды и действия | СЧП (старшие разряды) | СЧП (младшие разряды) | Пояснения | ||||||||
СЧП | Обнуление старших разрядов СЧП. | |||||||||||
[A]доп. | Сложение СЧП с множимым. | |||||||||||
СЧП | ||||||||||||
СЧП→ | Сдвиг СЧП. | |||||||||||
СЧП→ | Сдвиг СЧП. | |||||||||||
[A]доп. | Сложение СЧП с множимым. | |||||||||||
СЧП | ||||||||||||
СЧП→ | Сдвиг СЧП. | |||||||||||
[A]доп. | Сложение СЧП с множимым. | |||||||||||
СЧП | ||||||||||||
СЧП→ | Сдвиг СЧП. | |||||||||||
СЧП |
Сдоп. = (1.100111101)2
Спр. = (1.011000011)2 = -195
b) А>0, B<0:
[Aпр.] = 0.1111 [Bпр.] = 1.1101
[Bдоп.] = 1.0011
№ шага | Операнды и действия | СЧП (старшие разряды) | СЧП (младшие разряды) | Пояснения | ||||||||
СЧП | Обнуление старших разрядов СЧП. | |||||||||||
[A]пр. | Сложение СЧП с множимым. | |||||||||||
СЧП | ||||||||||||
СЧП→ | Сдвиг СЧП. | |||||||||||
[A]пр. | Сложение СЧП с множимым. | |||||||||||
СЧП | ||||||||||||
СЧП→ | Сдвиг СЧП. | |||||||||||
СЧП→ | Сдвиг СЧП. | |||||||||||
СЧП→ | Сдвиг СЧП. | |||||||||||
[A]пр. | Сложение СЧП с множимым. | |||||||||||
СЧП | ||||||||||||
СЧП→ | Сдвиг СЧП. | |||||||||||
Корр | [-A]доп. | |||||||||||
СЧП |
Спр. = (1.011000011)2 = -195
|
|
b) А<0, B<0:
[Aпр.] = 1.1111 [Bпр.] = 1.1101
[Bдоп.] = 1.0011
№ шага | Операнды и действия | СЧП (старшие разряды) | СЧП (младшие разряды) | Пояснения | ||||||||
СЧП | Обнуление старших разрядов СЧП. | |||||||||||
[A]доп. | Сложение СЧП с множимым. | |||||||||||
СЧП | ||||||||||||
СЧП→ | Сдвиг СЧП. | |||||||||||
[A]доп. | Сложение СЧП с множимым. | |||||||||||
СЧП | ||||||||||||
СЧП→ | Сдвиг СЧП. | |||||||||||
СЧП→ | Сдвиг СЧП. | |||||||||||
СЧП→ | Сдвиг СЧП. | |||||||||||
[A]доп. | Сложение СЧП с множимым. | |||||||||||
СЧП | ||||||||||||
СЧП→ | Сдвиг СЧП. | |||||||||||
Корр | [-A]пр. | |||||||||||
СЧП |
Спр. = (1.011000011)2 = -195
Особенности метода.
Сложение или вычитание множимого на каждом шаге зависит от того, как после сдвига вправо меняется младший разряд множителя. Если он поменялся с 0 на 1, то происходит вычитание множимого из СЧП. При изменении младшего разряда множителя с 1 на 0 происходит сложение множимого с СЧП.
Если младший разряд множителя не изменился, то производится только сдвиг. При реализации этого метода происходит чередование сложения и вычитания, поэтому старший разряд СЧП в явном виде представляет его знак. При сдвиге знак СЧП сохраняется.
Эффективность метода Бута по сравнению с обычным методом поразрядного умножения проявляется для тех множителей, в которых имеются длинные последовательности единиц.