Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
с. работа - Логика.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
2.16 Mб
Скачать

4.5. Умножение чисел, заданных в дополнительном коде

Операцию умножения проще всего выполнять в прямых кодах чисел. Вместе с тем применение инверсных кодов позволяет существен­но упростить операцию алгебраического сложения. Поэтому числа желательно хранить в ЗУ и умножать также в инверсном коде. В этом случае сомножители заданы в прямом коде, если они положи­тельны, либо в инверсном коде, если они отрицательны. Необходимо получить произведение в прямом коде, если оно положительно, или в инверсном коде, если оно отрицательно. При этом, с целью устране­ния циклических переносов, рациональнее использовать дополни­тельный код. При умножении в дополнительном коде, так же, как и при алгебраическом сложении, требуется введение поправок в пред­варительный результат. Эти поправки вносятся исходя из следующих предпосылок.

Если число А отрицательно, то значащие цифры его дополнитель­ного кода образуют величину

| [A] Д | = 1 - | А |. Поэтому при перемно­жении модулей кодов операндов в зависимости от сочетания знаков сомножителей могут возникнуть 4 случая.

1. А >0, В > 0. Случай тривиальный, получаем сразу истинное значение положительного произведения:

[А] Д [В] Д =[АВ] Д = АВ.

2. А > 0, В < 0. В этом случае получается следующий резуль­тат (псевдопроизведение):

| [А] Д | |[В] Д |=| A |(1-| B |) = | А | - | A | | B |.

Истинное произведение в дополнительном коде должно быть рав­но |[AВ]Д| = 1 — | А | •| В |. Поэтому требуется коррекция псевдо­результата на величину Δ= 1 — | А |, т. е. на величину дополнения модуля множимого до единицы.

3. А < 0, В > 0. Получаем после непосредственного применения алгоритма умножения:

| [А] Д | |[В] Д |=(1-| A | ) | B | = | B | - | A | | B |.

Истинный результат в дополнительном коде составит |[AВ]Д| = 1 — | А | •| В |. Следовательно, требуется коррекция псевдоре­зультата на величину Δ= 1 — | В |, т. е. па величину дополнения множителя до единицы.

4. А < 0, В < 0. После непосредственного применения алгорит­ма умножения получаем

| [А] Д | |[В] Д |=(1-| A | )(1- | B |) =1- | A | - | B | + | A | | B |.

Псевдорезультат требует коррекции на величину Δ= | А | + | В |, так как лишняя единица размещается в знаковом разряде и может быть просто заменена знаком произведения.

Как видим, сложность коррекции результата при умножении чи­сел в дополнительных кодах обусловлена тем, что в исправлении нуждается не только знак, но и цифровая часть произведения. Коррек­цию можно производить или в процессе формирования результата, или сразу но окончании этого процесса. Первый способ применяют чаще, так как он не требует дополнительных тактов работы АУ, сни­жающих скорость счета и усложняющих схему управления умноже­нием. Кроме того, при сдвигах, как правило, теряются один или оба сомножителя, а повторное обращение за ними в ЗУ нежелательно, так как приводит к снижению быстродействия ЭВМ.

С учетом изложенного коррекцию псевдорезультата для отрица­тельного множителя можно выполнить при умножении множимого А, на знаковую единицу множителя В, рассматривая ее как отрицатель­ную, то есть вместо суммирования А в этом цикле умножения нужно выполнить вычитание А или же суммирование [- А] Д . Ввиду того что в этом цикле прибавляется 2 - | А| вместо 1 - | А|, то сразу же формируется и правильная знаковая цифра результата, так как в силу исходного сочетания знаков он должен быть отрицательным и, значит, представлен в дополнительном коде. Таким образом, опи­санный прием обеспечивает коррекцию как величины результата, так и его знака.

Пример. Заданы А = 0,1011; [- A]ДМ = 11,0101;

B = - 0,1101; [B] ДМ =11,0011.

00,1011

X

11,0011

11,0101 —А • 2 0

00,00000 + 0

00,000000 + 0

+ 00,0001011 +А • 2 - 3

00,00001011 +А • 2 - 4

[A]Д [В]Д = 11,01110001.

Получаем правильный результат со знаком.

При отрицательном множимом и положительном множителе тре­буется коррекция результата на величину — В, введение которой зависит от схемы умножения. Для любой схемы умножения спра­ведливо

[A]Д [В| Д = [A] Д •0,b1b2 …b n = [A]Дb12 - 1 + [A]Дb22 - 2 +…+ [A]Дbn2 - n. (4.16)

Следовательно, при положительном множителе умножение произ­водится как в прямых кодах, так и с тем отличием, что множимое пе­редается в сумматор со знаком в модифицированном дополнительном коде. При этом в зависимости от схемы умножения выполняются мо­дифицированные сдвиги либо множимого, либо содержимого сумматора.

Пример. Заданы А = - 0,1011, [А] ДМ = 11,0101;

В = + 0,1101; [В] ДМ = 00,1101.

4-я схема умножения 1-я схема умножения

11,0101 11,0101

X X

00,1101 00,1101

00,0000 -0 • А• 2 0 + А 11,0101 Сдвиг

11,10101 + А • 2 -1 +0 11,10101 Сдвиг

11,110101 + А• 2 - 2 + 11,110101

00,0000000 +0 +А 11,0101

11,11110101 +А• 2 - 4

11,001001 Сдвиг

11,01110001

11,1001001

+ А 11,0101

10,1110001 Сдвиг

11,01110001.

Для 1-й схемы выполняется модифицированный сдвиг суммы частичных произ­ведений, для

4-й—множимого.

Если оба сомножителя отрицательны, то коррекция +| А |+| B | может быть получена объединением рассмотренных способов введения коррекций | А | и | В |. При этом получается правильный результат со своим знаком.

Пример. Заданы А = - 0,1011; [А] ДМ = 11,0101;

B = - 0,1101; [В] ДМ = 11,0011.

11,0101

X

11,0011

00,1011 - А • 2 0

00,00000 + 0

00,000000 + 0

11,1110101 +А • 2 - 3

11,11110101 +А • 2 - 4

00,10001111

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

Если сомножители представлены дополнительным кодом, можно применить также способ умножения, основанный на сопоставлении двух смежных цифр множителя.

В дополнительных кодах произведение имеет вид

[С] Д = [А]Д [В]Д = - [АД] b0 • 2 0 + [A]Д b1 • 2 - 1 +…+[A]Д bi • 2 - i+…+[A]Д bn • 2 n, (4.17)

где b0знаковый разряд множителя. Его можно представить сле­дующим образом:

[С]Д = [АД](b1 - b0 )• 2 0 + [A]Д (b2 - b1 )• 2 - 1 +…+[A]Д (bi+1 –bi )• 2 - i+…+[A]Д (bn+1 - bn )• 2 – n. (4.18)

При этом bn+1 = 0. Тогда, с учетом того, что перед началом умно­жения в сумматоре находится код нуля, для четвертой схемы умно­жения на нулевом шаге будем иметь

С0 = 0 + (b1 - b0 )[АД] • 2 0

На первом шаге

С1 = С0 + (b2 - b1 )[АД] • 2 - 1

На i-м шаге

Ci = Сi-1 + (bi+1 – bi )[АД] • 2 - i

Аналогичные результаты можно получить и для остальных схем умножения.

Таким образом, произведение формируется по следующим пра­вилам:

1) если данная цифра множителя равна 1, а цифра соседнего младшего разряда множителя есть 0, то множимое со своим весом следует вычитать;

2) если данная цифра множителя 0, а цифра соседнего младшего разряда есть 1, то множимое следует прибавлять со своим весом;

3) если данная цифра множителя такая же, как и цифра соседнего младшего разряда, то данное частичное произведение равно 0.

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

Ценность этого способа состоит в том, что при любом сочетании знаков сомножителей процесс умножения остается неизменным, Коррекция, необходимая при умножении сомножителей или их изо­бражений, вводится автоматически, так как знаковые разряды чисел обрабатываются так же, как и цифровые.

Примеры 1) А = 0,1011; 2) А = 0,1011;

B = 0,1101; В = -0,1101;

[B] ДМ =11,0011

00,1011 00,1011

X X

00,1101 11,0011

00,1011 11,0101

00,00000 00,00000

+ 11,110101 + 00,001011

00,0001011 00,0000000

11,11110101 11,11110101

00,10001111 11,01110001

3) А = - 0,1011; 4) A = - 0,1011;

B = 0,1101; B = - 0,1101;

[A] ДМ =11,0101; [A] ДМ =11,0101;

[B] ДМ =11,0011

11,0101 11,0101

X X

00,1101 11,0011

11,0101 00,1011

00,00000 00,00000

+ 00,001011 + 11,110101

11,1110101 00,0000000

00,00001011 00,00001011

11,01110001 00,10001111.

Во всех случаях получены прежние результаты.