Преобразуването от двоичен в десетичен да

BCD реализация се осъществява на практика по-често от десетична, двоична, но малко по-сложно. Необходимо да се реши, че обратният проблем за определяне на коефициентите на познат знак след десетичната двоичен полином.

В съответствие с (1) всички коефициенти ди (битове десетично число да се определи) може да се намери чрез разделяне на последователно D 10 и. Така след първия участък D / 10 N-1 MSB получи DN-1 като коефициент и остатък чрез разделяне DN-10 * 2 п-2 + ... + d1 * 10 1 + d0 * 10 0. След това, чрез разделяне на остатъка върху 10 n- 2 се получи постоянна заустване DN-2 и т.н.

Под-байт преобразуване двоично число в десетичната 3-цифрения изброени по-долу. Той трябваше да се използват две операции по 100 и се дели на 10.

Конвертиране еднобайтови брой (1), както виждаме, е оправдано. Но ако трябва да се превърнат в десетична представителство на, например, 3-байт двоично число, ще бъде необходимо да се използват няколко подпрограми разделение в 10,100,1000 т.н. Horner схема позволява да се управлява само разделяне от 10, не зависи от размера на преобразуваната номер.

Първият разделянето на D (2) за получаване на 10 LSB d0 като остатъкът и частното ... (DN-1 * 10 + DN-2) * 10 + ... + d1. Извършване на разделението, получена в предишния цикъл на частния, 10, ние определяме следващия по-висок ранг на d1 и т.н. Определяне на коефициентите на ди Хорнър схема, за разлика от (1) се извършва от най-ниската цифра d0 до DN-1 старши.

Подпрограма конвертиране от 2 байта двоично число на 5-цифрен десетични (десетични коефициенти d4 ... d0 съхранява в SRAM микроконтролер):

За BCD преобразуване има един алгоритъм, свързан с използването на резултат корекция BCD. В сравнение с горния пример, това изисква много голяма памет програми и регистри, но изпълнена с най-голяма скорост.

Процесорът изпълнява всички аритметични операции в съответствие със законите на двоичната аритметика и затова интерпретира всички данни, точно като двоични числа. Съответно, в резултат на тези операции са и цифрите, представени в двоичен формат. Ако използвате някои или друга форма на представяне на числа, е почти сигурно, всяко действие, произведена върху тях, ще доведе до грешка. Това ще се случи от факта, че цифрите, записани в друга код (различни от позицията), и при спазване на други математически закони.

Да предположим, че искате да добавите два еднобайтова двоично кодиран десетичен номер 0x95 и 0x76, които са влизането на десетични числа 95 и 76, съответно (в по-ниските Нибълс е написан на броя на дяловете в по-висока - броят на десетки), и да получите сумата от 0x171 (7 десетки, 1 единица Тя определя носене флаг C, както е сто) представени в двоичен кодиран десетичен формат. Въпреки това, след пускането добавите Rd, Rr е получено брой 0x10B (0x0B монтирано и носене флаг с) и това е напълно законно от гледна точка на резултатите от двоична аритметика.

Много микропроцесори имат специален екип, който коригира резултата от Освен това, ако условията бяха представени в двоичен кодиран десетичен формат. В нашия случай, такава команда ще конвертирате количество 0x10B в 0x171. Въпреки това, AVR-микроконтролер такава инструкция, за съжаление, липсва. Въпреки това, корекция BCD може лесно да се реализира в областта на софтуера.

Използване на BCD корекция изчислителна схема заедно с Horner може да конвертира двоични числа в следната последователност:
В = (... (Вп-1 * 2 + млрд-2) * 2 + ... + Ь1) * 2 + b0.

Към продукта млрд-1 * добавете 2 в непосредствена близост малко млрд-2, и с помощта на корекция BCD трансформира двоичен сума млрд-1 * 2 + млрд-2 в двоичен кодиран десетичен подаване форма. В следващата стъпка също произвежда умножение (Вп-1 * 2 + млрд-2) * 2 и след прибавяне млрд-3 бита, сумата от (Вп-1 * 2 + млрд-2) * 2 + млрд-3 подлежи на корекция отново и т.н.

Следваща подпрограма преобразува двоично trohbaytovogo номер в рамките на от 0 ... 0xFFFFFF, в десетичен (0 ... 16777215). Вместо поредица от умножения млрд-1 * 2 (млрд-1 * 2 + млрд-2) * 2, ... тя използва сумата от смяна на диск с едно малко наляво.