Недостатки

· Требует больше памяти.

· Усложнены арифметические операции. Так как в 8421-BCD используются только 10 возможных комбинаций 4-х битового поля вместо 16, существуют запрещённые комбинации битов: 1010(1010), 1011(1110), 1100(1210), 1101(1310), 1110(1410) и 1111(1510).


Поэтому, при сложении и вычитании чисел формата 8421-BCD действуют следующие правила:

1. При сложении двоично-десятичных чисел каждый раз, когда происходит перенос бита в старший полубайт, необходимо к полубайту, от которого произошёл перенос, добавить корректирующее значение 0110 (= 610 = 1610 — 1010: разница количеств комбинаций полубайта и используемых значений).

2. При сложении двоично-десятичных чисел каждый раз, когда встречается недопустимая для полубайта комбинация, необходимо к каждой недопустимой комбинации добавить корректирующее значение 0110 с разрешением переноса в старшие полубайты.

3. При вычитании двоично-десятичных чисел, для каждого полубайта, получившего заём из старшего полубайта, необходимо провести коррекцию, отняв значение 0110.

Пример операции сложения двоично-десятичных чисел:

Требуется: Найти число A = D + C, где D = 3927, C = 4856

A = 3927 + 4856 = 8783

 

Решение: Представим числа D и C в двоично-десятичной форме:
D = 392710 = 0011 1001 0010 0111BCD
C = 485610 = 0100 1000 0101 0110BCD

Суммируем числа D и С по правилам двоичной арифметики:

0011 1001 0010 0111 - D+ 0100 1000 0101 0110 - C * ** = 1000 0001 0111 1101 - Двоичная сумма+ 0110 0110 - Коррекция 1000 0111 1000 0011 - A (результат) 8 7 8 3 - Проверка!

'*' — тетрада, из которой был перенос в старшую тетраду

'**' — тетрада с запрещённой комбинацией битов

В тетраду, помеченную символом *, добавляем шестёрку, так как по правилам двоичной арифметики перенос унёс с собой 16, а по правилам десятичной арифметики должен был унести 10. В тетраду, помеченную символом **, добавляем шестёрку и разрешаем распространение переноса, так как комбинация битов 1101 (что соответствует десятичному числу 13) является запрещённой.

 

Пример операции вычитания двоично-десятичных чисел:

Требуется: Найти число A = C - D, где C = 4856, D = 3927

A = 4856 – 3927= 929

Решение: Представим числа C и D в двоично-десятичной форме:
C = 485610 = 0100 1000 0101 0110BCD

D = 392710 = 0011 1001 0010 0111BCD

 


 

Вычитаем числа С и D по правилам двоичной арифметики:

0100 1000 0101 0110 - C– 0011 1001 0010 0111 - D ** ** = 0000 1111 0010 1111 - Двоичная разность– 0110 0110 - Коррекция (вычитание) 0000 1001 0010 1001 - A (результат) 0 9 2 9 - Проверка!

'**' — тетрада с запрещённой комбинацией битов

Из тетрад, помеченных символом **, вычитаем шестёрку и разрешаем распространение заема.