Програма за преобразуване на еднобайтови двоични числа в BCD код

Максималната стойност на еднобайтовото число е 255. За да бъде преобразувано в двоично-десетично, може да се постъпи по следния начин. От зададената стойност да се изважда най-напред100, докато се получи отрицателен остатък. След това да се възстанови последният положителен остатък и по аналогичен начин да се изважда числото 10 до получаване на отрицателен остатък. Накрая да се изважда числото 1 от възстановения последен положителен остатък до отрицателен резултат. Всеки път броят на изважданията да се отброяват.

.include “m16def.inc”
CLR ZH
LDI ZL,0×60
LDI R16,(100)
STD Z+5,R16
LDI R16,(10)
STD Z+6,R16
LDI R16,(1)
STD Z+7,R16
LD R5,Z+
LDI R16,0×03
L2: CLR R0
LDD R6,Z+4
L1: INC R0
SUB R5,R6
BRSH L1
DEC R0
ADD R5,R6
ST Z+,R0
DEC R16
BRNE L2
LDI ZL,0×62
LD R5,Z
SWAP R5
OR R5,R0
ST Z, R5

Подпрограма за десетична корекция на резултата

Както е известно, числата в BCD код се кодират, като всяка десетична цифра се кодира с нейния двоичен еквивалент. За целта са необходими 4 разреда, но възможните при това комбинации са 15, а не 10. Следователно 6 комбинации са излишни и ако при някакви действия резултатът попадне в този списък, ще възникне грешка. Например, ако се сумират числата 7 и 5, ще се получи 12. В BCD код това е 0001 0010, докато в обикновен двоичен код това е 1100, т.е. забранена комбинация. За да се коригира тази грешка е необходимо да се прескочат 6 забранени комбинации. Това става като резултатът от сбора на 7 и 5 се събере с 6 и се следи дали има пренос.
0111
0101
1100
0110
0001 0010

Възможно е резултатът да си остане в списъка на разрешените комбинации. Например ако се събере 3 и 5. Тогава не трябва да се добавя числото 6. Признакът, по който ще се разпознава, дали е необходимо добавянето на 6 или не, е проверката дали при добавянето на 6 възниква пренос към следващата тетрада или не. Следователно, ако след като е добавено числото 6 е възникнал пренос следва, че добавянето е било необходимо. Ако не възникне пренос, резултатът не е бил в забранена комбинация и числото 6 трябва да се извади обратно.
В списъка на инструкциите на процесорите AVR няма инструкция за автоматична десетична корекция. За това в следващия пример е предвидено създаването на подпрограма за тази цел, която може да се използва като част от други програми, използващи BCD код.

.include “m16def.inc”
LDI R16,LOW(RAMEND)
OUT SPL,R16 ;Инициализиране на стека
LDI R16,HIGH(RAMEND)
LDI ZL,0×60 ;Задава адрес
CLR ZH
LD R0,Z+ ;Прехвърля в оперативен регистър
CALL DAA ;Извиква подпрограмата
JMP END
DAA: ;Начало на подпрограмата
LDI R16,0×06
ADD R0,R16 ;Добавя 6 към първата тетрада
BRHS DAAL1 ;Проверява за полупренос
SUB R0,R16 ;Ако няма полупренос
DAAL1:
CLR R1 ;Нулира байта за стотиците
INC R1 ;Допуска, че ще има стотици
LDI R16,0×60 ;Продължава с втората тетрада
LDI R17,0×01 ;Формира байт за стотиците
ADD R0,R16 ;Добавя 6 към старшата тетрада
BRCS DAAL2 ;Следи за пренос
SUB R0,R16 ;Ако няма пренос
CLR R1 ;Нулира байта за стотиците
DAAL2:
RET

END: ;край на програмата
ST Z+,R1 ;Записва байта на стотиците
ST Z,R0 ;Записва младшите две тетради

END: ;край на програмата

Сходни статии:

  1. Програма за преобразуване на четирибайтови числа в допълнителен код Програма за преобразуване на четирибайтови числа в допълнителен код Зададеното число се разполага в четири последователни клетки от паметта. И тук е прието най-старшият байт да е с най-малък адрес....
  2. Програма за деление на еднобайтови числа Да се разделят две числа означава, да се установи, колко пъти делителя се нанася в делимото. Това може да стане най-просто, като се изважда делителят от делимото циклично и се...
  3. Програма за събиране не еднобайтови BCD числа В тази програма не би трябвало да има нещо особено. Двата операнда се задават в BCD код в клетките 0х0060 0х0061. След това се извършва сумирането им по познатия начин....
  4. Програма за умножение на еднобайтови числа без алгебричен знак Програма за умножение на еднобайтови числа без алгебричен знак Алгоритъм на умножението Нека е дадено множимото 1101 и множителя1001. Алгоритъмът за умножение на десетични и двоични числа е един и...
  5. Програма за събиране на четирибайтови числа с алгебричен знак Програма за събиране на четирибайтови числа с алгебричен знак В следващия пример подпрограмата за обработване на знака е извикана три пъти. При първия път е зададен адресът на първия операнд...

Студио за уеб дизайн услуги, изработка на сайтове, SEO оптимизация и Интернет реклама Seven Web Design представя своите професионални уеб дизайн умения на високо ниво. Seven Web Design е продукт на Уеб Дизайн България Груп ООД ®
Comments are closed.