Машинное кодирование десятичных чисел

В современных ЭВМ для облегчения связи человека с машиной имеется возможность подготавливать и вводить в машину исходную информацию в привычной для человека десятичной системе счисления и получать результаты обработки информации также в десятичной системе. Для этой цели используются специальные, так называемые, двоично-десятичные коды, позволяющие представлять десятичные цифры посредством двоичных символов (0 и 1). Известен ряд систем такого кодирования десятичной информации. Выбор системы кодирования определяется особенностью использования десятичной информации в ЭВМ.

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

Если ЭВМ предназначена для обработки экономической информации или иной другой, связанной с большим объемом обработки десятичных данных, то довольно часто с помощью специальных алгоритмов в машине производятся операции над числами в десятичной системе счисления. В этом случае к способу кодирования десятичных чисел предъявляются требования удобства выполнения арифметических операций над этими числами в соответствующем коде.

Наибольшее распространение в вычислительной технике нашел естественный двоично-десятичный позиционный код 8421, в котором каждая цифра десятичного числа от 0 до 9 заменяется соответствующим четырехразрядным двоичным числом (тетрадой) с весовыми коэффициентами разрядов (слева направо) 8,4,2,1 (табл. 3.1). Такой код называют также Машинное кодирование десятичных чисел - student2.ru -кодом.

Таблица 3.1

Десятичные цифры
Двоично-десятичный код 8421

Этот код удобен для выполнения машинных преобразований из десятичной системы в двоичную и обратно, а также для выполнения арифметических операций в Машинное кодирование десятичных чисел - student2.ru -кодах.. Данный код аддитивен, то есть сумма представлений Машинное кодирование десятичных чисел - student2.ru цифр есть код их суммы. В ЭВМ с десятичной арифметикой код знака десятичного числа в двоично-десятичном изображении обычно размещается справа в разрядной сетке и может представляться, как в двоичной системе счисления, наименьшей и наибольшей цифрой, кодирующей соответственно знаки плюс и минус: + ~ 0000; – ~ 1001.

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

Описанный двоично-десятичный код 8421 без каких-либо модификаций мало удобен для реализации арифметических операций десятичными числами. Это вызвано трудностями обнаружения переноса в следующий десятичный разряд и относительной сложностью перехода к обратным и дополнительным кодам для десятичных чисел, облегчающим выполнение алгебраического сложения. Последнее объясняется тем, что код 8421 не является самодоопределяющимся, то есть инверсия его двоичных цифр не дает кода дополнения десятичной цифры до 9. В связи с этом, в процессе выполнения арифметических действий над двоично-десятичными числами, их коды преобразуются из системы 8421 либо в код с потетрадным избытком 3, либо в код с потетрадным избытком 6 (табл. 3.2), являющиеся самодоопределяющимисяи обеспечивающие легкое определение переноса из разряда в разряд, ввиду исключения лишних кодовых комбинаций (1010; 1011; 1100; 1101; 1110; 1111).

Таблица 3.2

Десятичная цифра Естественный двоично-десятичный код (8421) Код с избытком три Код с избытком шесть

Коды с потетрадным избытком 3 или 6 обеспечивают возможность применения достаточно простых в структурном отношении алгоритмов и устройств для выполнения арифметических операций в Машинное кодирование десятичных чисел - student2.ru -кодах.

Для того, чтобы при сложении десятичных цифр, сумма которых больше девяти, сформировать единицу переноса и передать ее в следующий десятичный разряд, следует представить либо цифры обоих слагаемых в коде с избытком три, либо цифры одного из слагаемых в коде с избытком шесть, оставив другое слагаемое в естественном двоично-десятичном коде. Если при выполнении сложения с применением таких кодов возникает перенос в следующую тетраду, то результат в данном разряде получается в естественном двоично-десятичном коде (без избытка). Если в каких-либо тетрадах при выполнении операции переносы не возникли, то для получения истинного результата операции из кодов этих тетрад необходимо вычесть избытки шесть. Вычитание из тетрады избытка, т.е. числа 6 (0110) можно заменить потетрадным прибавлением его дополнения до 24, то есть числа 1010.

Из-за особенностей кодирования знаков знак результата приходится формировать по специальным правилам.

Пример.

Сложить два десятичных числа Машинное кодирование десятичных чисел - student2.ru и Машинное кодирование десятичных чисел - student2.ru .

Естественные двоично-десятичные коды чисел Машинное кодирование десятичных чисел - student2.ru и Машинное кодирование десятичных чисел - student2.ru соответственно будут иметь вид Машинное кодирование десятичных чисел - student2.ru и Машинное кодирование десятичных чисел - student2.ru .

Представим число Машинное кодирование десятичных чисел - student2.ru в коде с потетрадным избытком шесть:

0000 1001 Х

Машинное кодирование десятичных чисел - student2.ru + 0110 0110 избыток 6

0110 1111 Х (с избытком 6).

В результате сложения сформированного с избытком 6 кода числа Машинное кодирование десятичных чисел - student2.ru с кодом числа Машинное кодирование десятичных чисел - student2.ru (без избытка) получим

0110 1111 Х (с избытком 6)

Машинное кодирование десятичных чисел - student2.ru + 0001 0110 Y

1000 0101 (Х+Y) (с избытком 6).

Машинное кодирование десятичных чисел - student2.ru

Поскольку при сложении возник перенос ← только из первой справа тетрады во вторую, то необходимо скорректировать содержимое второй тетрады, вычтя из нее число 6=0110, то есть прибавив его дополнение 1010. В результате выполнения этой операции получим истинный результат, равный, как нетрудно заметить, десятичному числу 25:

1000 0101 (Х+Y) (с избытком 6)

Машинное кодирование десятичных чисел - student2.ru + 1010 0000 коррекция

0010 0101 Х+Y=25.

Операция коррекции - потетрадная, поэтому все переносы из тетрад теряются и не влияют на результат.

Легко показать, что аналогичный результат будет получен, если в каждый из операндов ввести потетрадную избыточность 3= 0011.

X = 9 = 0000 1001

Y = 16 = 0001 0110

X(изб. 3) = 0011 1100

Машинное кодирование десятичных чисел - student2.ru Y(изб. 3) = 0100 1001

Машинное кодирование десятичных чисел - student2.ru X(изб. 3) + Y(изб. 3) = 1000 0101

Машинное кодирование десятичных чисел - student2.ru коррекция 1010 0000

X + Y = 0010 0101 = 25(10)

Наши рекомендации