Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций ОКО-2015.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
5.69 Mб
Скачать

2.5.1 Форматы числовых данных bcd-кодов

В современных микропроцессорных системах, обрабатывающих не только числовую информацию, но и текстовую (алфавитно-цифровую), отдельные символы чаще всего представляются словами длиной в один байт. Так как байт равен двум двоичным тетрадам, то в микропроцессорных системах с байтовым представлением информации можно записывать две десятичные цифры в один байт. Такую запись называют также упакованной записью или упакованным форматом записи десятичных цифр. Вместе с тем, можно записывать в один байт и по одной десятичной цифре, используя остальные четыре разряда для записи знаков и вспомогательных символов. Такую запись называют распакованной записью или распакованным форматом. В микропроцессорных системах широкого назначения обычно реализуются обе возможности записи десятичных цифр. Рассмотрим упакованный десятичный формат. Младшая цифра занимает в байте правую тетраду (биты ), а старшая – левую (биты ). Обе цифры представлены в коде «8,4,2,1». Многоразрядные упакованные десятичные числа занимают несколько байт. Для представления знака числа используют запрещенные кодовые комбинации: для ), для . Код знака числа записывают в старшей тетраде старшего байта.

Распакованный формат называют символьным или ASCII-форматом.

Каждый байт содержит код, соответствующий десятичной цифре в кодовой таблице ASCII. В ней цифры имеют коды . Таким образом, значение десятичной цифры представлено в младшей тетраде, а старшая тетрада является кодом «зоны» . Поэтому такой формат также называют зонированным. Для обозначения знака используют коды символов и из кодовой таблицы ASCII соответственно.

2.5.2 Арифметические операции над числовыми данными bcd-кодов

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

– правила формирования десятичного переноса отличаются от правил формирования двоичного переноса;

– сумма двоичных кодов десятичных цифр, полученная по правилам двоичной арифметики, не всегда равна их сумме, полученной по десятичным правилам.

По этим причинам при использовании ДДК, обладающих свойством аддитивности, суммирование десятичных цифр в двоичном представлении проводят в два этапа:

1) суммируют двоичные представления десятичных цифр по правилам двоичной арифметики;

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

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

Рассмотрим, как можно определить корректирующую поправку и правильно сформировать перенос в старший десятичный разряд для ДДК «8,4,2,1». Для этого составим таблицу двоичных сумм, их представлений после первого этапа сложения, правильных их представлений в ДДК «8,4,2,1» десятичных переносов и корректирующих поправок (табл. 2.25).

Таблица 2.25 – Таблица двоичных сумм после первого этапа сложения

Десятичная

сумма

Сумма после

первого этапа

s5s4s3s2s1

Правильная

сумма

pz4z3z2z1

Коррекция

с5с4с3с2с1

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

0 0 0 0 0

0 0 0 0 1

0 0 0 1 0

0 0 0 1 1

0 0 1 0 0

0 0 1 0 1

0 0 1 1 0

0 0 1 1 1

0 1 0 0 0

0 1 0 0 1

0 1 0 1 0

0 1 0 1 1

0 1 1 0 0

0 1 1 0 1

0 1 1 1 0

0 1 1 1 1

1 0 0 0 0

1 0 0 0 1

1 0 0 1 0

1 0 0 1 1

0 0 0 0 0

0 0 0 0 1

0 0 0 1 0

0 0 0 1 1

0 0 1 0 0

0 0 1 0 1

0 0 1 1 0

0 0 1 1 1

0 1 0 0 0

0 1 0 0 1

1 0 0 0 0

1 0 0 0 1

1 0 0 1 0

1 0 0 1 1

1 0 1 0 0

1 0 1 0 1

1 0 1 1 0

1 0 1 1 1

1 1 0 0 0

1 1 0 0 1

0 0 0 0 0

0 0 0 0 0

0 0 0 0 0

0 0 0 0 0

0 0 0 0 0

0 0 0 0 0

0 0 0 0 0

0 0 0 0 0

0 0 0 0 0

0 0 0 0 0

0 0 1 1 0

0 0 1 1 0

0 0 1 1 0

0 0 1 1 0

0 0 1 1 0

0 0 1 1 0

0 0 1 1 0

0 0 1 1 0

0 0 1 1 0

0 0 1 1 0

Из таблицы видно, что если результат, полученный на первом этапе, находится в пределах от 0 до 9, то корректировать его нет необходимости, а двоичный и десятичный перенос в этом случае совпадают. Если же результат первого этапа находится в пределах от 10 до 19, то для образования правильной суммы к предварительной сумме необходимо прибавить корректирующую поправку . Признаком нахождения суммы первого этапа в диапазоне от 10 до 19 может служить наличие единичного значения переноса . Таким образом, если при прибавлении коррекции перенос , то как правильную сумму необходимо взять результат первого этапа, если же , то как правильную сумму необходимо взять откорректированный результат.

При сложении или вычитании многоразрядных десятичных операндов описанные действия должны выполняться по каждому десятичному разряду (в ДДК «8,4,2,1» – по каждой тетраде двоичных разрядов).

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

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

– суммирование частичных произведений должно осуществляться по правилам десятичной арифметики (то есть, используются для этого десятичные сумматоры);

– сдвиг в регистрах осуществляется одновременно на один десятичный разряд;

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

Для учета особенности при умножении с младших разрядов или при умножении со старших разрядов десятичный разряд регистра множителя снабжают цепями вычитания единиц и в каждом такте суммирования цифру в этом разряде уменьшают на единицу. Такты суммирования производят до тех пор, пока в десятичном разряде, управляющем умножением, не будет получен нуль. Если для представления десятичных цифр используется ДДК «8,4,2,1», то указанный десятичный разряд выполняют в виде счетчика.

При умножении по этому алгоритму на один разряд множителя в среднем приходится тактов суммирования (предполагаем, что цифры появляются во всех разрядах множителя с равными вероятностями).

Деление десятичных чисел в микроконтроллерных системах, как и двоичных чисел, можно выполнять по двум основным алгоритмам: с восстановлением остатка и без. Реализация первого алгоритма требует несколько больших временных затрат (примерно на ) по сравнению со вторым.

В соответствии с этим алгоритмом сдвиг выполняется на один десятичный разряд, все суммирования и вычитания, а также формирование обратного и дополнительного кодов (в случае использования их для вычитания) должны выполняться по правилам десятичной арифметики. На каждый шаг деления здесь приходится несколько суммирований-вычитаний.

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

Вопросы для самопроверки

1. Поясните термин «каноническая система счисления».

2. Назовите методы переводов чисел из одной канонической системы счисления в другую.

3. Дайте определение форматам и типам числовых данных.

4. Поясните принцип кодирования отрицательных двоичных чисел.

5. Поясните алгоритм операции сложения знаковых двоичных чисел, представленных в дополнительном коде.

6. Что такое контроль переполнения разрядности сетки?

7. Поясните алгоритмы операций сдвига.

8. Поясните алгоритмы умножения и деления беззнаковых и знаковых двоичных чисел.

9. Дайте определение стандарту IEEE-754.

10. Поясните принципы выполнения арифметических операций над числами в формате с плавающей запятой.

11. Поясните принцип представления числовых данных в коде BCD.

12. Поясните принципы выполнения арифметических операций над числовыми данными в коде BCD.

13. Поясните принцип представления числовых данных в коде ASCII.

14. Поясните принципы выполнения арифметических операций над числовыми данными в коде ASCII.