Главная /
Ассемблер /
Для чайников /
Введение /
Представление данных /
Что такое BCD
BCD - это Binary-Coded Decimal (двоично-десятичный код). Он же 8421-BCD.
Это форма записи рациональных чисел, когда каждый десятичный разряд числа записывается в виде его четырёхразрядного двоичного кода.
Вообще с помощью четырёхразрядного двоичного кода можно закодировать 16 чисел - это
шестнадцатеричная система.
Двоично-десятичный код отличается от шестнадцатеричной системы тем, что он использует только первые десять комбинаций. Значения BCD приведены в таблице ниже.
Десятичное |
HEX |
BIN |
BCD |
0 |
0 |
0000 |
0000 |
1 |
1 |
0001 |
0001 |
2 |
2 |
0010 |
0010 |
3 |
3 |
0011 |
0011 |
4 |
4 |
0100 |
0100 |
5 |
5 |
0101 |
0101 |
6 |
6 |
0110 |
0110 |
7 |
7 |
0111 |
0111 |
8 |
8 |
1000 |
1000 |
9 |
9 |
1001 |
1001 |
10 |
A |
1010 |
Запрещено |
11 |
B |
1011 |
Запрещено |
12 |
C |
1100 |
Запрещено |
13 |
D |
1101 |
Запрещено |
14 |
E |
1110 |
Запрещено |
15 |
F |
1111 |
Запрещено |
В BCD используются только первые 10 комбинаций, которыми можно закодировать 10 цифр от 0 до 9. Остальные комбинации в BCD являются запрещёнными.
BCD код также применяется в телефонной связи. В этом случае кроме десятичных цифр кодируются символы * или #, или любые другие. Для записи этих символов в коде BCD используются запрещенные комбинации:
BCD |
Дополнительный символ |
1010 |
* (звёздочка) |
1011 |
# (решётка) |
1100 |
(плюс) |
1101 |
- (минус) |
1110 |
, (десятичная запятая) |
1111 |
символ гашения |
Преимущества и недостатки формата BCD
Преимущества
- Удобно использовать для вывода на индикаторы с одной цифрой. Например, в часах каждый индикатор отображает десятичное число в двоично-десятичной системе (от 0 до 9).
- Упрощён вывод чисел на индикацию - вместо последовательного деления на 10 требуется просто вывести на индикацию каждый полубайт. По этой же причине проще ввод данных с цифровой клавиатуры.
- Для дробных чисел (как с фиксированной, так и с плавающей запятой) при переводе в человекочитаемый десятичный формат и наоборот не теряется точность.
- Упрощены умножение и деление на 10, а также округление.
По этим причинам двоично-десятичный формат применяется в калькуляторах и других устройствах, которые выводят данные на семисегментные или другие индикаторы, где каждый отдельный индикатор отображает только одну цифру.
Недостатки
- Требует больше памяти.
- Усложнены арифметические операции.
Операции с BCD
Так как в BCD данных используются только 10 возможных комбинаций 4-х битового поля вместо 16, существуют запрещённые комбинации битов (см. выше). Поэтому, при сложении и вычитании чисел BCD действуют следующие правила:
- При сложении двоично-десятичных чисел каждый раз, когда происходит перенос бита в старший полубайт, необходимо к полубайту, от которого произошёл перенос, добавить поправочное значение 0110 = 610 = (1610 - 1010) - разница количеств комбинаций полубайта и используемых значений, то есть всего комбинаций в тетраде 16, из них разрешённых 10, а запрещенных 6.
- При сложении двоично-десятичных чисел каждый раз, когда встречается недопустимая для полубайта комбинация (число, большее 9), необходимо к каждой недопустимой комбинации добавить поправочное значение 0110 с разрешением переноса в старшие полубайты.
- При вычитании двоично-десятичных чисел, для каждого полубайта, получившего заём из старшего полубайта, необходимо провести поправку, отняв значение 0110.
Поэтому почти в любом языке ассемблера есть специальные команды для работы с BCD числами.
Пример операции сложения двоично-десятичных чисел:
Требуется: Найти число Х = Y + Z, где Y = 0929, Z = 1538
Решение: Представим числа Y и Z в двоично-десятичной форме:
Y = 929 (DEC) = 0000 1001 0010 1001 (BCD)
Z = 1538 (DEC) = 0001 0101 0011 1000 (BCD)
Суммируем числа Y и Z по правилам двоичной арифметики:
** *
0000 1001 0010 1001 (929)
+ 0001 0101 0011 1000 (1538)
___________________
= 0001 1110 0110 0001 - Двоичная сумма (7777)
+ 0110 0110 - Поправка (по правилу 1 и правилу 2)
___________________
0010 0100 0110 0111 - сумма BDC (2467)
Красным жирным в сумме выделены запрещённые комбинации.
Синим жирным выделены поправки по правилу 2.
Чёрным жирным выделены поправки по правилу 1.
* — тетрада, из которой был перенос в старшую тетраду
** — тетрада с запрещённой комбинацией битов (в сумме)
В тетраду, помеченную символом *, добавляем шестёрку, так как по правилам двоичной арифметики перенос унёс с собой 16, а по правилам десятичной арифметики должен был унести 10.
В тетраду, помеченную символом **, добавляем шестёрку и разрешаем распространение переноса, так как комбинация битов 1110 в сумме после сложения соответствует десятичному числу 14 и является запрещённой.
ПРИМЕЧАНИЕ
По сути BCD - это та же шестнадцатеричная система, только с числами от 0 до 9 (числа A...F являются запрещёнными). То есть каждая тетрада записывается в числе BCD в отдельном разряде.