<< Előző oldal Vissza a tartalomjegyzékhez Következő oldal >>
11.4.20. 16 bit bináris/5 jegyű BCD átalakítás
Assembly programozás tartalomjegyzék
"A" algoritmus
"B" algoritmus
"C" algoritmus
A fejezetben bemutatott algoritmusok a következő ábra szerinti 16 bites bináris/ötjegyű BCD átalakítást hajtják végre.
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 | 35 | 900 | 900 |
B | 54 | 30 | 250 |
C | 87 | 53 | 300 |
A algoritmus:
Ez az algoritmus az AN526 programozási algoritmus-gyűjteményben került bemutatásra (Microchip). A megvalósított program rövid (35 sor), de a futási idő viszonylag hosszú (900 utasításciklus).
A 16 bites bináris kiinduló érték a BINH és BINL regiszterekben van, de a programfutás során elveszik. Az eredmény, a 20 bites ötjegyű BCD szám, a BCD3, BCD2 és BCD1 regiszterekbe kerül. A program felhasznál még egy SZAM és egy REKESZ azonosítójú általános adatregisztert.
A bináris kiinduló adat (50328d) bitsorrendje:
BCDH | BCDL | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
7. | 6. | 5. | 4. | 3. | 2. | 1. | 0. | 7. | 6. | 5. | 4. | 3. | 2. | 1. | 0. | |
215 | 214 | 213 | 212 | 211 | 210 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | |
1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 0 |
A BCD kódolt eredmény (50328BCD) bitsorrendje:
BCD3 | BCD2 | BCD1 | |||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
7. | 6. | 5. | 4. | 3. | 2. | 1. | 0. | 7. | 6. | 5. | 4. | 3. | 2. | 1. | 0. | 7. | 6. | 5. | 4. | 3. | 2. | 1. | 0. | ||
x | x | x | x | 23 | 22 | 21 | 20 | 23 | 22 | 21 | 20 | 23 | 22 | 21 | 20 | 23 | 22 | 21 | 20 | 23 | 22 | 21 | 20 | ||
x | x | x | x | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | ||
x | 104 | 103 | 102 | 101 | 100 |
Az algoritmus folyamatábrája:
A folyamatábrát megvalósító programrészlet:
... ... bcf STATUS,0 ;a STATUS regiszter C jelzőbit nullázása movlw 0x10 ;W = 16d movwf SZAM ;SZAM = 16d clrf BCD1 ;BCD1 = 0 clrf BCD2 ;BCD2 = 0 clrf BCD3 ;BCD3 = 0 UJRA rlf BINL,1 ;BINL balra forgatása a C-n keresztül rlf BINH,1 ;BINH balra forgatása a C-n keresztül rlf BCD1,1 ;BCD1 balra forgatása a C-n keresztül rlf BCD2,1 ;BCD2 balra forgatása a C-n keresztül rlf BCD3,1 ;BCD3 balra forgatása a C-n keresztül decfsz SZAM,1 ;SZAM = SZAM - 1 és zérusteszt goto TOVABB ;ugrik, ha SZAM > 0 goto VEGE ;ugrik, ha SZAM = 0 TOVABB movlw BCD1 ;W = a BCD1 memóriacíme movwf FSR ;a közvetett címzés regiszterének betöltése call HELYES ;a helyesbítő szubrutin hívása movlw BCD2 ;W = a BCD2 memóriacíme movwf FSR ;a közvetett címzés regiszterének betöltése call HELYES ;a helyesbítő szubrutin hívása movlw BCD3 ;W = a BCD3 memóriacíme movwf FSR ;a közvetett címzés regiszterének betöltése call HELYES ;a helyesbítő szubrutin hívása goto UJRA ;vissza a ciklus elejére VEGE ... ... HELYES movlw 0x03 ;W = 3h addwf INDF,0 ;W = az FSR által megcímzett regiszter + 3 movwf REKESZ ;REKESZ = W btfsc REKESZ,3 ;a REKESZ 3. bitjének tesztelése movwf INDF ;az FSR által mutatott regiszter = W movlw 0x30 ;W = 30h addwf INDF,0 ;W = az FSR által megcímzett regiszter + 30h movwf REKESZ ;REKESZ = W btfsc REKESZ,7 ;a REKESZ 7. bitjének tesztelése movwf INDF ;az FSR által mutatott regiszter = W return ;a szubrutin vége ...
B algoritmus:
Ez az algoritmus a 16 bites osztás kivonással történő megvalósításán alapul (Tudomány és Technika). A megvalósított program viszonylag rövid (54 sor), a futási idő (30..250 utasításciklus) a bináris szám nagyságától függ.
A 16 bites bináris kiinduló érték a BINH és BINL regiszterekben van, de a programfutás során elveszik. Az eredmény, az ötjegyű BCD szám, a BCD5, BCD4, BCD3, BCD2 és BCD1 regiszterek alsó 4 bitjére kerül.
A bináris kiinduló adat (50328d) bitsorrendje:
BCDH | BCDL | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
7. | 6. | 5. | 4. | 3. | 2. | 1. | 0. | 7. | 6. | 5. | 4. | 3. | 2. | 1. | 0. | |
215 | 214 | 213 | 212 | 211 | 210 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | |
1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 0 |
A BCD kódolt eredmény (50328BCD) bitsorrendje:
BCD5 | BCD4 | BCD3 | BCD2 | BCD1 | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
7.-4. | 3. | 2. | 1. | 0. | 7.-4. | 3. | 2. | 1. | 0. | 7.-4. | 3. | 2. | 1. | 0. | 7.-4. | 3. | 2. | 1. | 0. | 7.-4. | 3. | 2. | 1. | 0. | ||||
x | 23 | 22 | 21 | 20 | x | 23 | 22 | 21 | 20 | x | 23 | 22 | 21 | 20 | x | 23 | 22 | 21 | 20 | x | 23 | 22 | 21 | 20 | ||||
x | 0 | 1 | 0 | 1 | x | 0 | 0 | 0 | 0 | x | 0 | 0 | 1 | 1 | x | 0 | 0 | 1 | 0 | x | 1 | 0 | 0 | 0 | ||||
104 | 103 | 102 | 101 | 100 |
Az algoritmus folyamatábrája:
A folyamatábrát megvalósító programrészlet:
... ... clrf BCD1 ;BCD1 = 0 clrf BCD2 ;BCD2 = 0 clrf BCD3 ;BCD3 = 0 clrf BCD4 ;BCD4 = 0 clrf BCD5 ;BCD5 = 0 T5 movlw 0x27 ;-10000 kölcsönig ismételve subwf BINH,0 btfss STATUS,0 goto T4 movwf BINH movlw 0x10 subwf BINL,1 btfss STATUS,0 decf BINH,1 incf BCD5,1 goto T5 T4 movlw 0x03 ;-1000 kölcsönig ismételve subwf BINH,0 btfss STATUS,0 goto T3A movwf BINH movlw 0xE8 subwf BINL,1 btfss STATUS,0 decf BINH,1 incf BCD4,1 goto T4 T3A movlw 0x01 ;-100 kölcsönig ismételve subwf BINH,0 btfsc STATUS,0 ;BINH > 0 ? goto T3B ;ha BINH > 0 movlw 0x64 ;ha BINH = 0 subwf BINL,0 btfss STATUS,0 goto T2 movwf BINL incf BCD3,1 goto T3A T3B movlw 0x64 ;ha BINH > 0 subwf BINL,0 btfss STATUS,0 decf BINH,1 movwf BINL incf BCD3,1 goto T3A T2 movlw 0x0A ;-10 kölcsönig ismételve subwf BINL,0 btfss STATUS,0 goto T1 movwf BINL incf BCD2,1 goto T2 T1 movf BINL,0 W = BINL movwf BCD1 BCD1 = BINL ...
C algoritmus:
Ez az algoritmus a bináris helyiértékek egyenkénti feldolgozásán alapul (Tudomány és Technika). A megvalósított program közepesen hosszú (87 sor), a futási idő (53..300 utasításciklus) a bináris szám "1"-eseinek számától és helyétől függ.
A 8 bites bináris kiinduló érték a BIN regiszterben van és a program lefutása után is megmarad. Az eredmény, a 8 bites kétjegyű BCD szám, a W munkaregiszterbe kerül. Az algoritmus a bináris számban előforduló helyiértékek
A bináris kiinduló adat (50328d) és a BCD kódolt eredmény bitsorrendje az előző algoritmusénak megfelelő.
Az algoritmus folyamatábrája:
A folyamatábrát megvalósító programrészlet:
... ... clrf BCD1 ;eredmény-regiszterek nullázása clrf BCD2 clrf BCD3 clrf BCD4 clrf BCD5 btfsc BINH,7 ;helyiértékek szétosztása call H7 btfsc BINH,6 call H6 btfsc BINH,5 call H5 btfsc BINH,4 call H4 btfsc BINH,3 call H3 btfsc BINH,2 call H2 btfsc BINH,1 call H1 btfsc BINH,0 call H0 btfsc BINL,7 call L7 btfsc BINL,6 call L6 btfsc BINL,5 call L5 btfsc BINL,4 call L4 movlw 0x0F andwf BINL,0 ;W = BINL alsó négy bitje addwf BCD1,1 T1 movlw 0x0A ;BCD1 értéktúllépés vizsgálata subwf BCD1,0 btfss STATUS,0 goto T2 ;ugrik, ha már nincs értéktúllépés movwf BCD1 incf BCD2,1 goto T1 T2 movlw 0x0A ;BCD2 értéktúllépés vizsgálata subwf BCD2,0 btfss STATUS,0 goto T3 ;ugrik, ha már nincs értéktúllépés movwf BCD2 incf BCD3,1 goto T2 T3 movlw 0x0A ;BCD3 értéktúllépés vizsgálata subwf BCD3,0 btfss STATUS,0 goto T4 ;ugrik, ha már nincs értéktúllépés movwf BCD3 incf BCD4,1 goto T3 T4 movlw 0x0A ;BCD4 értéktúllépés vizsgálata subwf BCD4,0 btfss STATUS,0 goto VEGE ;ugrik, ha már nincs értéktúllépés movwf BCD4 incf BCD5,1 goto T4 VEGE ... ... H7 movlw 0x03 ;32768 szétosztása addwf BCD5,1 movlw 0x02 addwf BCD4,1 movlw 0x07 addwf BCD3,1 movlw 0x06 addwf BCD2,1 movlw 0x08 addwf BCD1,1 return H6 incf BCD5,1 ;16384 szétosztása movlw 0x06 addwf BCD4,1 movlw 0x03 addwf BCD3,1 movlw 0x08 addwf BCD2,1 movlw 0x04 addwf BCD1,1 return H5 movlw 0x08 ;8192 szétosztása addwf BCD4,1 incf BCD3,1 movlw 0x09 addwf BCD2,1 movlw 0x02 addwf BCD1,1 return H4 movlw 0x04 ;4096 szétosztása addwf BCD4,1 movlw 0x09 addwf BCD2,1 movlw 0x06 addwf BCD1,1 return H3 movlw 0x02 ;2048 szétosztása addwf BCD4,1 movlw 0x04 addwf BCD2,1 movlw 0x08 addwf BCD1,1 return H2 incf BCD4,1 ;1024 szétosztása movlw 0x02 addwf BCD2,1 movlw 0x04 addwf BCD1,1 return H1 movlw 0x05 ;512 szétosztása addwf BCD3,1 incf BCD2,1 movlw 0x02 addwf BCD1,1 return H0 movlw 0x02 ;256 szétosztása addwf BCD3,1 movlw 0x05 addwf BCD2,1 movlw 0x06 addwf BCD1,1 return L7 incf BCD3,1 ;128 szétosztása movlw 0x02 addwf BCD2,1 movlw 0x08 addwf BCD1,1 return L6 movlw 0x06 ;64 szétosztása addwf BCD2,1 movlw 0x04 addwf BCD1,1 return L5 movlw 0x03 ;32 szétosztása addwf BCD2,1 movlw 0x02 addwf BCD1,1 return L4 incf BCD2,1 ;16 szétosztása movlw 0x06 addwf BCD1,1 return ...
Tudomány és Technika (test@t-es-t.hu)
<< Előző oldal Vissza a tartalomjegyzékhez Vissza a lap tetejére Következő oldal >>