Алгебраическое сложение в дополнительном коде

Как и при рассмотрении сложения в обратном коде в отсутствии переполнения возможны четыре случая сочетания знаков и модулей слагаемых:

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 = 1010121]пр = 0.0010101 0.0010101 0.0010101
х2 = -0100122]пр = 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 = -1010121]пр = 1.0010101 1.1101010 1.1101010
х2 = +0100122]пр = 0.0001001 0.0001001 +0 .0001001

1.1110011

В результате получаем отрицательное число 1.1110011 – число, кодированное в обратном коде. Декодируем результат, т.е. инвертируем значащие цифры числа, и получим

1.00011002 = -1210

Проверка: х = -21; у = +9; х + у = -12 = 1.01100(2)

в) Произвести сложение чисел х1 = 101012 и х2 =- 010012 используя дополнительный код.

Прямой код Дополнительный код Сложение
х1 = 1010121]пр = 0.0010101 0.0010101 0.0010101
х2 = -0100122]пр = 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

При сложении чисел одного знака возможно переполнение разрядной сетки, признаком чего является несовпадение знака результата со знаком операнда. В АЛУ имеется специальная логическая схема, которая автоматически формирует признак переполнения.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: