Операция сложения производится только над модулями двоично-десятичных чисел; знак результата определяется отдельно в результате анализа знаков слагаемых.
Сложение модулей десятичных чисел, имеющих одинаковые знаки, производится по следующим правилам:
1. Одно из слагаемых представляется в коде с избытком 6 (табл, 2.3), другое – в коде 8-4-2-1
2. Сложение двоично-десятичных модулей выполняется по правилам двоичной арифметики.
3. Если при сложении тетрад получается результат больше 10, то автоматически вырабатывается перенос в следующую тетраду. В этом случае результат в данной тетраде получается в естественном двоично-десятичном коде 8-4-2-1 и коррекция для этой тетрады не требуется.
4. Если при сложении в каких – либо тетрадах переносы отсутствуют, то для получения истинного результата из кодов этих тетрад необходимо вычесть избытки 6 (сложить дополнение до 16, т.е. 1010).
Пример 1. Сложить А = и B = 5810.
Ответ: Сумма 9410
Сложение модулей десятичных чисел, имеющих разные знаки, производится по следующим правилам:
|
|
1. Модуль положительного числа представляется в прямом коде 8-4-2-1; модуль отрицательного числа – в дополнительном коде с избытком 6. Для получения дополнения отрицательного числа от модуля надо инвертировать значения разрядов всех его тетрад и к младшему разряду последней (младшей) тетрады прибавить единицу. Дополнительный код от модуля двоично-десятичного числа берется не десятичный, а двоичный, представляющий собой дополнительный код с избытком 6 (тетрады дополняются до 16, а не до 10).
2. Сложение двоично-десятичных модулей выполняется по правилам двоичной арифметики.
3. Если при сложении тетрад получается результат больше 1010, то автоматически вырабатывается перенос в следующую тетраду. Если возникает перенос из старшей тетрады, то он теряется, а результату присваивается знак плюс, т.е. результат получается в прямом избыточном коде Для получения истинного результата необходимо вычесть избытки 6 (сложить дополнение до 16, т.е. 1010) в тех тетрадах, где перенос отсутствовал.
4. Если при сложении тетрад (п. 2.) перенос из старшей тетрады отсутствует, то результату присваивается знак минус, т.е. результат получается в дополнительном избыточном коде. Для получения истинного результата необходимо инвертировать каждый разряд и к младшему разряду прибавить единицу. После чего провести коррекцию (прибавить дополнение 1010) полученного кода по всем тетрадам.
Пример 2. Даны два числа: А = 35710 и B = 19610. Запишем данные числа в прямом, обратном и дополнительном двоично-десятичном кодах:
А пр = 0011 0101 0111 Впр = 0001 1001 0110
Аобр= 1100 1010 1000 Вобр = 1110 0110 1001
|
|
Адоп= 1100 1010 1001 Вдоп = 1110 0110 1010
Пример 3. Вычтем из числа А = 35710 число B = 19610, для чего сложим Апр и Вдоп:
Апр = 0011 0101 0111
Вдоп = 1110 0110 1010
Апр +Вдоп = *0001 1100 *0001(Отмеченные "*" тетрады имеют перенос)
1010 (проведем коррекцию результата)
А-В= 0001 0110 0001
А-В= + 110 610 110
Операция суммирования | Знак | ||||
Апр | 0 0 1 1 | 0 1 0 1 | 0 1 1 1 | ||
Вдоп | 1 1 1 0 | 0 1 1 0 | 1 0 1 0 | ||
S = Впр + Адоп | *0 0 0 1 | 1 1 0 0 | *0 0 0 1 | ||
Коррекция | 0 1 1 0 | ||||
S = Впр + Адоп с коррекцией | 1 1 1 0 | 1 0 0 1 | 1 1 1 1 | ||
Sпр | 0 0 0 1 | 0 1 1 0 | 0000 +1 | ||
Sпр | + 16110 |
Пример 4. Вычтем из числа B = 19610 число А = 35710, для чего сложим Впр и Адоп: Впр = 0001 1001 0110; Адоп = 1100 1010 1001
Операция суммирования | Знак | ||||
Впр | 0 0 0 1 | 1 0 0 1 | 0 1 1 0 | ||
Адоп | 1 1 0 0 | 1 0 1 0 | 1 0 0 1 | ||
S = Впр + Адоп | 1 1 1 0 | *0 0 1 1 | 1 1 1 1 | ||
Коррекция | 0 1 1 0 | ||||
S = Впр + Адоп с коррекцией | 1 1 1 0 | 1 0 0 1 | 1 1 1 1 | ||
Sпр инвертирование | 0 0 0 1 | 0 1 1 0 | 0 0 0 0 + 1 | ||
Sпр | –16110 |
Переполнение разрядной сетки возможно при сложении операндов с одинаковыми знаками. Оно может быть определено по наличию переноса из старшей тетрады. При выполнении операции вычитания меняется знак второго операнда, после чего действия над числами производится так же, как и при сложении.