Как и при рассмотрении сложения в обратном коде в отсутствии переполнения возможны четыре случая сочетания знаков и модулей слагаемых:
1. А > 0, В > 0, А + В < 1
Этот случай соответствует обычному сложению прямых кодов чисел. Переноса из знакового разряда не возникает. Коррекции результата не требуется.
2. А > 0, В < 0, А + В > 0
В этом случае (при положительной сумме) результат равен А + В и коррекция заключается в вычитании 2.
3. А > 0, В < 0, А + В < 0
Переноса из знакового разряда не возникает. Результат не нуждается в коррекции.
4. А < 0, В < 0, |А + В| < 1
Здесь предварительный результат нуждается в коррекции путем вычитания 2, поскольку истинное значение отрицательной суммы, представленной в дополнительном коде А + В + 2.
Как и в обратном коде коррекция требуется в случаях 2 и 4, причем в дополнительном коде она сводится к игнорировании переноса возникающего в знакомом разряде.
Таким образом, для выполнения алгебраического сложения двоичных чисел, представленных в дополнительном коде, достаточно, не анализируя соотношение знаков и модулей, произвести сложение чисел, включая знаковые разряды, по правилам двоичной арифметики, причем возникающий в знаковом разряде перенос отбрасывается. Полученный код является алгебраической суммой слагаемых, представленных в дополнительном коде.
|
|
Пример 2 случая. Сложить 2 числа в дополнительном коде А = 1310 и В = -310
А = +1101 Апр =0.1101 Аоб =0.1101 Ад = 0.1101
В = - 0011 Впр =1.0011 Воб =1.1100 Ад = 1.1101
10.1010 → С = +1010 → +1010
Поскольку сумма А+В>0 коррекция результата заключается только в игнорировании возникшего в знаковом разряде переноса.
Пример 3 случая. Сложить 2 числа в дополнительном коде А = -1310 и В = +310
А = -1101 Апр =1.1101 Аоб =1.0010 Ад = 1.0011
В = +0011 Впр =0.0011 Воб =0.0011 Ад = 0.0011
1.0110 → С = -1010 → -1010
Поскольку сумма А+В<0 отрицательная и результат представлен в дополнительном коде коррекция заключается в обратном преобразовании результата в прямой код, т.е. из результата вычитается 2 (1 из младшего разряда) затем полученный результат инвертируется (преобразование в обратный код).
Сд = 1.0110 → Соб =1.0101 → Спр =1.1010 → С =-1010 → -1010
Пример 4 случая. Сложить 2 числа в дополнительном коде А = -510 и В = -610
А = - 0101 Апр =1.0101 Аоб =1.1010 Ад = 1.1011
В = - 0110 Впр =1.0110 Воб =1.1001 Ад = 1 .1010
11.0101
Поскольку сумма А+В<0 –отрицательная и результат представлен в дополнительном коде коррекция заключается в обратном преобразовании результата в прямой код, т.е. из результата вычитается 2 (1 из младшего разряда) затем полученный результат инвертируется (преобразование в обратный код).
Сд = 1.0101 → Соб = 1.0100 → Спр = 1.1011 → С = -01011 →- 1110
Рассмотрим случай сложения чисел с одинаковыми знаками |А+В|>1 приводящих к переполнению разрядной сетки.
|
|
Пример с переполнением разрядной сетки.
Сложить два числа в дополнительном коде: 13/16 + 5/16 = 18/16
А = +0,1101 Апр =0.1101 Аоб =0.1101 Ад = 0.1101
В = +0,0101 Впр =0.0101 Воб =0.0101 Ад = 0.0101
1.0010
Сд = 1.0010 → Соб =1.0001 → Спр =1.1110 → С = - 0,1110
Таким образом, признаком переполнения в обратном коде можно считать знак результата, противоположный одинаковым знакам слагаемых.
Вывод
Применение дополнительного кода, по сравнению с обратным, имеет одно существенное преимущество – коррекция результата сводится просто к отбрасыванию переноса из знакового разряда и не требует дополнительных затрат машинного времени.
Недостатки. Более сложная процедура преобразования из прямого кода и проблемы с обнаружением переполнения. Для того чтобы минимизировать влияние первого недостатка, данные в памяти часто хранятся в дополнительном коде и преобразование пр.код – доп. код выполняются редко – только при вводе и выводе.
Ø Арифметические операции сложения и вычитания
Суммирование целых двоичных чисел со знаком выполняются по тем же правилам, что и без знака т.е. по правилам десятичного сложения. Перенос в следующий разряд производится после того, как сумма достигает 2 (1+1). Результат выполнения операции должен находится в диапазоне:
2n - 1≥ |х| ≥ 0 где n –число разрядов, отводимых для цифровой части числа
т.е. если числа участвующие в операции сложения 8-разрядные (n=7), то и сумма должна укладываться в этот диапазон.
Пример:
а) Произвести сложение чисел х1 = 101012 и х2 = -010012 используя обратный код
Прямой код Обратный код Сложение
х1 = 101012 [х1]пр = 0.0010101 0.0010101 0.0010101
х2 = -010012 [х2]пр = 1.0001001 1.1110110 + 1.1110110
10.0001011
+ 1
0,0001100
Проверим в десятеричном коде эквивалентными целыми числами:
Х1 = +2110 (101012); х2 = -910 (10012); х1 + х2 = 21 – 9 = 12 (01100(2))
Замечание: Для того чтобы избежать ошибок при выполнении бинарных операций, перед переводом чисел в обратные и дополнительные коды необходимо выравнивать количество разрядов прямого кода операндов до 4, 8, 16 или 32 разрядов.
б) Произвести сложение чисел х1 = -101012 и х2 = 010012 используя обратный код
Прямой код Обратный код Сложение
х1 = -101012 [х1]пр = 1.0010101 1.1101010 1.1101010
х2 = +010012 [х2]пр = 0.0001001 0.0001001 +0 .0001001
1.1110011
В результате получаем отрицательное число 1.1110011 – число, кодированное в обратном коде. Декодируем результат, т.е. инвертируем значащие цифры числа, и получим
1.00011002 = -1210
Проверка: х = -21; у = +9; х + у = -12 = 1.01100(2)
в) Произвести сложение чисел х1 = 101012 и х2 =- 010012 используя дополнительный код.
Прямой код Дополнительный код Сложение
х1 = 101012 [х1]пр = 0.0010101 0.0010101 0.0010101
х2 = -010012 [х2]пр = 1.0001001 1.1110110 + 1.1110111
+ 1 10.0001100
1.1110111 удалить Результат: 0.0001100
Проверим в десятеричном коде эквивалентными целыми числами:
х1 = +2110 (101012); х2 = -910 (10012); х1 + х2 = 21 – 9 = 12 (01100(2))
г) Сложить двоичные числа А = -1010 и В = -0011 в обратном и дополнительном кодах:
Предварительные преобразования:
А = -1010 [А]пр = 1.1010 [А]об = 1.0101 [А]доп = 1.0110
В = -0011 [B]пр = 1.0011 [B]об = 1.1100 [B]доп = 1.1101
Решение:
[А]об = 1.0101 [А]доп = 1.0110
+ [B]об = 1.1100 + [B]доп = 1.1101
11.0001 [C]доп = 11.0011 С = -11012 = -1310
+1
[C]об = 1.0010 С = -11012 = -1310
При сложении чисел одного знака возможно переполнение разрядной сетки, признаком чего является несовпадение знака результата со знаком операнда. В АЛУ имеется специальная логическая схема, которая автоматически формирует признак переполнения.