Выполнение операции сложения в D-коде 8421 имеет ряд особенностей: во-первых, возникающий при сложении межтетрадный перенос вместо необходимых десяти единиц (как это принято в десятичной системе счисления при формировании переноса в следующий разряд) уносит шестнадцать (16 – удвоенный вес старшего разряда тетрады), т.е. значение, содержащееся в тетраде, из которой возник перенос, на шесть единиц меньше необходимого; во-вторых, при сложении тетрад могут получаться запрещенные комбинации, соответствующие числам больше девяти, но меньше пятнадцати; в-третьих, отрицательные числа необходимо представлять в инверсном коде, но, как указывалось выше, D-код 8421 не обладает свойством самодополняемости, что необходимо учитывать.
Все указанные трудности решаются путем прибавления тетрады 0110, соответствующей коду цифры 6. Действительно, если межтетрадный перенос уменьшает значение в тетраде на шесть лишних единиц, то коррекция может быть осуществлена путем прибавления недостающих шести единиц. Далее, для коррекции тетрад, содержащих запрещенные комбинации, из них, очевидно, необходимо вычесть 10. Вычитание 10-ти можно заменить прибавлением дополнения 10-ти до 16-ти, т.е. для коррекции к значению запрещенной комбинации следует прибавить 6. Для получения обратного кода все тетрады числа (кроме знака) необходимо сначала увеличить на 6, а затем поразрядно инвертировать. Дополнительный код может быть получен из обратного путем прибавления единицы к младшему разряду младшей тетрады числа.
Рассмотрим пример.
; ;
.
;
.
Поскольку первое слагаемое отрицательное, его необходимо представить в инверсном коде, например, дополнительном.
Так как дополнительный код положительного слагаемого совпадает с его прямым кодом, переходим непосредственно к сложению.
Коррекция
Коррекция (нули опустим)
Таким образом, .
При выполнении сложения в D-коде 8421+3 обратный код отрицательного операнда может быть получен путем инвертирования двоичных разрядов кода (дополнительный код получается из обратного прибавлением единицы к младшему разряду).
После сложения операндов необходимо всегда выполнять коррекцию результата. Легко видеть, что если при сложении из тетрады не было переноса, то ее значение следует уменьшить на три единицы (вычесть 0011), а если перенос был, то увеличить на три единицы (прибавить 0011). Очевидно, вычитание 0011 можно заменить прибавлением дополнения 3 до 16, т.е. для коррекции к тетрадам, из которых при сложении не возник перенос, необходимо прибавить 1101. Следует помнить, что при выполнении коррекции в D-коде 8421+3 переносы между тетрадами не распространяются.
Рассмотрим пример. Значения слагаемых возьмем из предыдущего примера.
; ;
.
;
.
Получим дополнительный код первого операнда вышеописанным способом и выполним сложение.
(переносы показаны стрелками)
Коррекция (без переносов)
Таким образом, .
В дальнейшем будем рассматривать выполнение арифметических операций в D-коде 8421+3.