Pro převod na DEC potřebujeme zjistit počet obsažených stovek - to jest vydělit vstupní údaj stovkou. Instrukční sada 8051 však obsahuje pouze dělení v rozsahu 8 bitů ! Nyní ale stačí, když požijeme fintu, která spočívá v tom, že číslo 100 lze vyjádřit jako 4*25! Fakticky tedy vstupní údaj vydělíme 4 (pouze dva binární posuvy doprava – viz. binární aritmetika) vysledek dělení 4 se vejde do rozsahu 1 byte, který již vydělíme 25 klasickým postupem instrukcí DIV ab.
Celkový zbytek po dělení obnovíme v opačném pořadí = zbytek po dělení 25 násobíme 4 a připočteme zbytek po dělení 4.
Tento způsob snížení čísla, které dělíme lze použít obecně i ve složitějších algoritmech..
Download rutiny - bin2bcd_finta.zip (1 kB)
Bin2BCD: mov a,rii ;jed_tisic do Acc rrc a xch a,ri rrc a ;deli 2 xch a,ri rrc a xch a,ri rrc a ;znovu deli 2, dohromady 4 mov f0,C mov b,#25D ;deli 100/4 div ab xch a,ri ;do ri odlozi pocet stovek (BCD) rlc a ;bit 7 ri {puvod. bit 0 rii}do Cy mov a,b ;zbytek do acc rlc a mov C,f0 rlc a mov b,#10D div ab swap a orl a,b ;desitky a jednotky bcd v acc ret |