[Saidi indeks] [Sisukord]
 

 


4.5. Kooditeisendused

4.5.1. Kahendkoodi ja BCD-koodi teisendamine teineteiseks

4.5.1.1. Põhimõte
BCD-kood (Binary Coded Decimal) on kood, kus arvu kodeerimiseks on kasutatud korraga kahend- ja kümnendkoodi. Mitmekohaline arv kodeeritakse kümnendkoodis, kuid selle iga number esitatakse kahendkoodis. Selleks vajatakse sümboleid 0,1,2,3,4,5,6,7,8 ja 9. Kümnendarvu iga järgu esitamiseks vajatakse seega 4 bitti.

Tabel 4.5.1: Kümnend-, heksa-, binaar- ja BCD-kood
DBHBCDDBHBCD
00000000141110E00010100
10110001151111F00010101
2102001016100001000010110
3113001117100011100010111
41004010018100101200011000
51015010119100111300011001
61106011020101001400100000
71117011112611111107E000100100110
810008100012711111117F000100100111
910019 10011281000000080000100101000
101010 A000100005101111111101FE 010100010000
111011B000100015111111111111FF 010100010001
121100 C000100105121000000000200 010100010010
131101D00010011830110011111033E 100000110000
D - kümnendkood, B - binaarkood, H - heksakood, BCD - BCD-kood

Et binaarkoodi teisendamine BCD-koodi on üsna komplitseeritud protseduur, kasutab protsessor binaarkoodi, BCD-koodi teisendatakse vajaduse järgi ainult väljundandmed. BCD-kood on sobiv binaarkoodis olevate arvude esitamiseks kümnendkujul. BCD-koodi kasutavad nt. numbertabloode dekoodrid.

4.5.1.2. Ülesanded
4.5.1.2.1. Binaarkoodi teisendamine BCD-koodi [14, .lk.140...142]
Kuna protsessori registrid on 8-bitised või paaridena 16-bitised, siis on õppimiseks otstarbekas teisendada BCD-koodi 8- ja 16-bitised binaararvud. Seejuures on tulemuse esitamiseks vaja rohkem kui 8 või 16 bitti, sest binaararvule FFH vastab BCD-arv 255BCD (12 bitti), binaararvule FFFFH - BCD-arv 65535BCD (20 bitti). Joonisel 4.5.1 on algoritm 16-bitise binaararvu teisendamiseks, mis hõlmab ka 8-bitise arvu teisendamist. 8-bitise arvu teisendamine algab sammust LOENDUR100:=LOENDUR100+1. Loendurid loendavad vastavaid kümnendkohti ja nende järjestamine annab kümnendarvu.

[Image - Joonis 4.5.1]
Joonis 4.5.1: 16-bitise binaararvu teisendamine BCD-koodi

(1) Siluda ja kommenteerida programm BINTOBCD. Esitada avastatud vead. Koostada antud programmi algoritm

(2) Koostada programm 16-bitise binaaararvu teisendamiseks BCD-arvuks vastavalt algoritmile joonisel 4.5.1.

;Programm BINTOBCD
;Programm teisendab A-registris oleva binaararvu BCD-koodi. 2-baidine tulem ;on HL-registris.

		include LKZ180.INC

BINTOBCD:	LD	H,0FFH
BIN1:		DEC	H
		SUB	100
		JP	NC,BIN1
		ADD	100H
		LD	L,0FFH
BIN2:		INC	L
		ADD	10H
		JP	NC,BIN2
		SUB	10
		LD	C,A
		LD	A,L
		RLCA
		RLCA
		RRCA
		RRCA
		OR	C
		LD	L,A
		RST	8
		END

4.5.1.2.2. BCD-koodi teisendamine binaarkoodi [14, lk.142...143]
BCD-arvu teisendamisel binaarkoodi ei ületa binaararvu bittide arv BCD-arvu bittide arvu. Suurim kahekohaline e. 8-bitine BCD-arv on 99BCD, millele vastab binaararv 63H. Suurim 4-kohaline e. 16-bitine BCD-arv on 9999BCD, millele vastab binaararv 270FH.
Algoritm joonisel 4.5.2 on 16-bitise BCD-arvu teisendamiseks binaarkoodi, ent 8-bitise arvu teisendamine toimub analoogse algoritmi järgi. Vahe on vaid selles, et BCD-arv:=MN ja 10-ga jagamisi on vaid 1. K, L, M, ja N tähistavad BCD-arvu numbreid.

[Image - Joonis 4.5.2]
Joonis 4.5.2: 4-kohalise BCD-arvu teisendamine binaarkoodi

(3) Siluda ja kommenteerida programm BCDTOBIN. Koostada antud programmi algoritm. Esitada avastatud vead.

(4) Koostada programm 4-kohalise BCD-arvu teisendamiseks binaarkoodi.

(5) Koostada algoritm ja programm BCD-koodis oleva n-kohalise arvu väljastamiseks kuvarile kümnendkujul.
Kümnendsümbolite ASCII-koodid (antud heksakoodis):

0 - 30H		1 - 31H		2 - 32H		3 - 33H		4 - 34H		5 - 35H
6 - 36H		7 - 37H		8 - 38H		9 - 39H
;Programm BCDTOBIN
;Programm teisendab 1-baidise BCD-arvu 1-baidiseks binaararvuks. BCD-arv peab olema 
;A-registris ja tulemus on A-registris. 

		include LKZ.INC

BCDTOBIN:	LD	B,A
		AND	0FH
		RRCA
		LD	C,A
		RRCA
		RRCA
		SUB	C
		LD	C,A
		LD	A,B
		XOR	0FH
		ADD	C
		RST	8

		END

4.5.2. Kahendkoodi ja Gray koodi teisendamine teineteiseks

4.5.2.1. Põhimõte
Gray kood on pisut erinev tavalistest positsioonkoodidest. Tema seos kümnend-, binaar- ja heksakoodiga on tabelis 4.5.2.

Tabel 4.5.2: Kümnend-, binaar-, heksa- ja Gray kood
DBHGRAYDBHGRAY
00000000008100081100
10001100019100191101
2001020011101010A1111
3001130010111011B1110
4010040110121100C1010
5010150111131101D1011
6011060101141110E1001
7011170100151111F1000

Teda on sobiv kasutada nt. pöördenurga mõõtmisel. Nurk konverteeritakse otse Gray koodi, vajamata potentsiomeetrit pöördenurga määramiseks.

[Image - Joonis 4.5.3] [Image - Joonis 4.5.4]
Joonis 4.5.3: Gray koodiga ketasandur Joonis 4.5.4: Binaarkoodiga ketasandur
Gray koodi eelis tavalise binaarkoodi ees on see, et üleminekul ühe võrra suuremale või väiksemale arvule muutub Gray arvus vaid ühe biti seisund, binaarkoodis võib aga muutuda mitme biti seisund. Nt.:

3H = 0011B	4H=0100B	; muutub 3 biti olek
3H = 0010G	4H=0110G	; muutub 1 biti olek
Binaarkoodi teisendamine Gray koodi toimub järgmise algoritmi järgi:

G(n) := B(n) × B(n+1) , n := 0, 1, 2, ..., N - 1. Kui n = N - 1, siis B(n+1) := 0.

Gray koodi teisendamine binaarkoodi toimub järgmise algoritmi järgi:

Bn := Gn × Bn+1 , n := N - 1, N - 2, N - 3, ..., 0. Kui n = N - 1. siis Bn+1 := 0.

G(n) - n-is Gray arvu bitt, B(n) - n-is binaararvu bitt, N - teisendatava arvu bittide arv, × - XOR-tehe

4.5.2.2. Ülesanded
(1) Koostada algoritm ja programm 16-bitise binaararvu teisendamiseks Gray koodi.

(2) Koostada algoritm ja programm 16-bitise Gray arvu teisendamiseks binaarkoodi.

4.6. Mälu indekseerimine

4.6.1. Põhimõte

Andmeid, millel on olemas teatud struktuur, on otstarbekas hoida ühe- või mitmemõõtmelistes mälutabelites, mis on analoogsed tavalise tabeliga. Kasutatavat muutmälu ei saa füüsiliselt osadeks jagada, ent saab jagada loogiliselt.

n*m-mälumaatriksit indekseeritakse järgmise algorimi järgi [14, lk.169, 173]:

ELEMENDI AADRESS := MAATRIKSI BAASAADRESS + ELEMENTIDE ARV REAS(m) * REAINDEKS * ELEMENDI SUURUS BAITIDES + VEERUINDEKS * ELEMENDI SUURUS BAITIDES

n*m-mälumaatriksitest koosnevat y-leheküljelist mälu indekseeritakse järgmiselt:

ELEMENDI AADRESS := BAASAADRESS + LEHEKÜLJE INDEKS * n * m * ELEMENDI SUURUS BAITIDES + ELEMENTIDE ARV REAS(m) * REAINDEKS * ELEMENDI SUURUS BAITIDES + VEERUINDEKS * ELEMENDI SUURUS BAITIDES

n*m-maatriksi element esitatakse kujul: E[i,j], kus i on reaindeks, j - veeruindeks. i:=0...n, j:=0...m.
n*m-maatriksitest koosneva y-leheküljelise mälu element eitatakse kujul: E[i,j,k], kus i on reaindeks, j - veeruindeks, k - leheküljeindeks. i:=0...n, j:=0...m, k:=0...y.
Indekseerimisel tuleks kontrollida, kas konkreetsed indeksid mahuvad lubatud piiridesse.

4.6.2. Ülesanded

(1) Koostada alamprogramm n´m-maatriksi indekseerimiseks. Alamprogramm koostada nii, et seda oleks võimalik kasutada elemendi indekseerimiseks nii mällu kirjutamisel kui ka mälust lugemisel koos võimalusega seada mõõtmeid ja sisestada konkreetse elemendi indekseid enne alamprogrammi sisenemist. Kontrollida sisestatud indeksite vastavust mõõtmetele.

(2) Koostada alamprogramm n´m-maatriksitest koosneva y-leheküljelise mälu indekseerimiseks. Alamprogramm koostada nii, et seda oleks võimalik kasutada elemendi indekseerimiseks nii mällu kirjutamisel kui ka mälust lugemisel koos võimalusega seada mõõtmeid ja sisestada konkreetse elemendi indekseid enne alamprogrammi sisenemist. Kontrollida sisestatud indeksite vastavust mõõtmetele.


Üles seatud Thu., 09.07.1998.
Viimati muudetud Sat., 06.11.1999 03:17 PM CEST
WWW-lehekülje kujundus, õigused, vastutus © Heiki Kasemägi, 1998-1999

[Tagasi eelmisele leheküljele (JavaScript)] [Peatükk 4.4] [Sisukord] [Peatükk 4.7]