Суммирование чисел со знаками производят с использованием обратных или дополнительных кодов. Рассмотрим вариант построения сумматора двух четырехразрядных чисел и B(4). Знак числа принято указывать в старшем бите (требуется дополнительный пятый разряд). Положительное число в пятом разряде кодируется 0, отрицательное число 1. Мы выберем модифицированные коды, когда под знак отдаются два старших разряда:
A6 A5 = 00 – число положительное, A6 A5 = 11 – число отрицательное.
Пример. Заданы числа A10 = 910 и B10 = 1210, необходимо просуммировать их со знаками = (+A + B), S2 = (+A – B), S3 = (– A + B), S4 = (–A – B). Прямой код положительного числа Aпр = 00 10012, обратный код отрицательного числа Aобр = 11 10012,аналогично для числа B: Bпр = 00 11002, Bобр = 11 00112,
Возможные варианты результатов суммирования Таблица 4.13
S1 = (+ A + B)
S2 = (+ A – B)
S3 = (– A + B)
S4 = (– A – B)
Aпр
00 1001
Aпр
00 1001
Aобр
11 0110
Aобр
11 0110
Bпр
00 1100
Bобр
11 0011
Bпр
00 1100
Bобр
11 0011
S1
01 0101
S2
11 1100
S3
1 00 0010
00 0011
S4
1 10 1001
10 1001
Инверсия
11 0011
11 1010
Ответ
+ 2110
– 310
+ 310
– 2110
Примечание Стрелкой обозначен циклический перенос
Проанализируем полученные результаты.
1. При суммировании чисел с одинаковыми знаками (S1, S4) возможно переполнение разрядной сетки. Если бы под знак оставляли один разряд, то в первом случае (S1) при суммировании положительных чисел получили бы отрицательное число 1 01012 (–510). Во втором случае при суммировании отрицательных чисел получили бы +510.
2. При переполнении разрядной сетки единицу переполнения необходимо циклически прибавить к младшему разряду суммы (S3, S4)
Эти особенности будут учтены при разработке сумматора чисел со знаками.
В связи с тем, что отрицательные числа необходимо инвертировать, воспользуемся замечательным свойством логического элемента «неравнозначность» (XOR) инвертировать аргумент A в зависимости от уровня (низкий – высокий) аргумента B. В таблице истинности «исключающее ИЛИ» (неравнозначность) показано, что при b = 0 сигнал a проходит на выход не меняясь, при b = 1 сигнал a инвертируется. Это говорит о том, что данный логический элемент можно применить для преобразования кода числа в обратный код. Предлагаемый вариант функциональной схемы сумматора двоичных чисел со знаками приведен на рис. 4.57.
Числа A и B подаются на входы сумматора через ЛЭ «неравнозначность», на второй управляющий вход которого подается сигнал знака (0,1). Выходные сигналы суммы передаются на выход также через ЛЭ «неравнозначность», знак выходного сигнала снимается со старшего разряда (S5). Выход переполнения разрядной сетки P5 соединен со входом P0 младшего разряда для выполнения функции циклического переноса.