<< Előző oldal Vissza a tartalomjegyzékhez Következő oldal >>
11.4.19. 8 bit bináris/3 jegyű BCD átalakítás
Assembly programozás tartalomjegyzék
Az itt következő algoritmusrészletek a következő ábra szerinti 8 bites bináris/háromjegyű BCD átalakítást hajtják végre az előző fejezetben bemutatott algoritmusokhoz kapcsolódva.
Egy nyolc bites bináris szám értéke decimálisan a 0..255 intervallumban van. Ebből következik, hogy a háromjegyű BCD szám első jegye (százas helyiérték) csak 0, 1 vagy 2 lehet.
Mivel a három BCD számjegy képes megjeleníteni a 8 biten ábrázolható összes számot, az algoritmus bemenő értékét nem kell ellenőrizni.
A következőkben a BCD eredmény százas helyiértékének meghatározása látható, a további számjegyeket az előző fejezet valamelyik algoritmusával kell számítani. A 8 bites bináris kiinduló érték a BIN regiszterben van. A százas helyiérték a BCDH regiszterbe kerül.
Az egyes megoldások méret- és sebesség-jellemzői láthatók a következő táblázatban.
Algoritmus | Programmemória helyfoglalás |
Futási idő [utasításciklus] | |
---|---|---|---|
Minimum | Maximum | ||
A | 8 | 6 | 22 |
B | 16 | 9 | 13 |
A algoritmus:
Ez az algoritmus a kiinduló érték százasával való fokozatos csökkentésén alapul (Microchip). A megvalósított program rövid (8 sor), de minél nagyobb a kiinduló érték annál hosszabb a futási idő (maximum 22 utasításciklus).
A 8 bites bináris kiinduló érték a BIN regiszterben van, ami a programfutás során a százas helyiértéknek megfelelően csökken. Az eredmény, a százas helyiérték szorzója (0, 1 vagy 2), a BCDH regiszterbe kerül.
Az algoritmus folyamatábrája:
A folyamatábrát megvalósító programrészlet:
... ... clrf BCDH ;BCDH = 0 UJRA movlw 0x64 ;W = 100d subwf BIN,0 ;W = BIN - 100d btfss STATUS,0 ;ha W >= 0, átlép goto VEGE ;ha W < 0, ugrik movwf BIN ;BIN = W = BIN - 100d incf BCDH,1 ;BCDH = BCDH + 1 goto UJRA ;visszaugrik az elejére VEGE ... ...
B algoritmus:
Ez a megoldás a fentiekben bemutatott ciklusos algoritmus szekvenciális változata, aminek eredményeként a program hosszabb lesz ugyan, de a futási idő csökken. A program 16 utasításból áll, futási ideje a bemenő számadattól függően 9, 11 vagy 13 utasításciklus.
A 8 bites bináris kiinduló érték a BIN regiszterben van, ami a programfutás során a százas helyiértéknek megfelelően csökken. Az eredmény, a százas helyiérték szorzója (0, 1 vagy 2), a BCDH regiszterbe kerül.
Az algoritmus folyamatábrája:
A folyamatábrát megvalósító programrészlet:
... ... clrf BCDH ;BCDH = 0 movlw 0xC8 ;W = 200d subwf BIN,0 ;W = BIN - 200d btfss STATUS,0 ;BIN > 200 ? goto G100 ;ha BIN < 200, ugrás movwf BIN ;BIN = BIN - 200d movlw 0x02 ;W = 2 movwf BCDH ;BCDH = 2 goto VEGE ;a végére ugrik G100 movlw 0x64 ;W = 100d subwf BIN,0 ;W = BIN - 100d btfss STATUS,0 ;BIN > 100 ? goto VEGE ;ha BIN < 100, ugrás movwf BIN ;BIN = BIN - 100d movlw 0x01 ;W = 1 movwf BCDH ;BCDH = 1 VEGE ... ...
Tudomány és Technika (test@t-es-t.hu)
<< Előző oldal Vissza a tartalomjegyzékhez Vissza a lap tetejére Következő oldal >>