Двоичным сумматором дополнительного кода (ДСДК) называется, сумматор оперирующий числами, представленными в дополнительном коде.
Основной особенностью ДСДК является наличие цепи переноса 1 переполнения из старшего разряда цифровой части в знаковый разряд (рисунок 8.1), и отсутствие обратной связи переноса 1 переполнения из знакового разряда в самый младший разряд числа.
Для определения правил сложения чисел в ДСДК необходимо рассмотреть следующую теорему.
Теорема: Если результат суммы дополнительных кодов чисел отрицательный, то результат представлен в дополнительном коде. Если результат суммы дополнительных кодов чисел положительный, то результат представлен в прямом коде.
При доказательстве теоремы, предполагаем, что числа представлены в форме с фиксированной запятой, стоящей перед старшим разрядом. Рассмотрим следующие случаи:
1. A>0, B>0, а A + B<1 числа положительные и нет переполнения. Для этого случая Aдоп = А, Вдоп = В , то Адоп + Вдоп = А + В = [A + B]доп – результат положительный. Покажем это на примере: А = 0,1010; В = 0,0100
|
1. A<0, B>0, а |A|>B. Для этого случая Адоп = q + |-A|, Вдоп = В тогда Адоп+Вдоп = =q + |A| + B = [A + B]доп – результат отрицательный.
А = – 0,1011; В = 0,0100
Результат получен отрицательный, это значит, что он представлен в дополнительном коде, и его необходимо перевести в прямой, чтобы получить истинный результат. Перевод числа из дополнительного кода в прямой осуществляем по следующему алгоритму: -все разряды числа (кроме знаковых) инвертируем (т. е. берется обратный код результата) и в младший разряд добавляется +1. Знак сохраняется.
3 A<0, B>0, а |A|<B. для этого случая Адоп = q + |A|, Вдоп = В тогда Адоп + + Вдоп = q + |A| + B. Так как значение этой суммы больше q, то появляется единица переноса в знаковый разряд, что равносильно изъятию из суммы q единиц, т.е. результат равен:
Адоп + Вдоп = А + В=Спр.
Пример. А = -0,0100; В = 0,1011.
4 A<0, B<0, а |A + B|<1. для этого случая Адоп = q +(-А) Вдоп = q +(-В), тогда Адоп + Вдоп = q +(-A) + q +(-B) = [A + B]доп – результат отрицательный и появится единица переноса из знакового разряда. Пример. . А = – 0,0100; В = – 0,1011.