![]() |
![]() |
---|
D | B | H | BCD | D | B | H | BCD |
---|---|---|---|---|---|---|---|
0 | 00 | 0 | 0000 | 14 | 1110 | E | 00010100 |
1 | 01 | 1 | 0001 | 15 | 1111 | F | 00010101 |
2 | 10 | 2 | 0010 | 16 | 10000 | 10 | 00010110 |
3 | 11 | 3 | 0011 | 17 | 10001 | 11 | 00010111 |
4 | 100 | 4 | 0100 | 18 | 10010 | 12 | 00011000 |
5 | 101 | 5 | 0101 | 19 | 10011 | 13 | 00011001 |
6 | 110 | 6 | 0110 | 20 | 10100 | 14 | 00100000 |
7 | 111 | 7 | 0111 | 126 | 1111110 | 7E | 000100100110 |
8 | 1000 | 8 | 1000 | 127 | 1111111 | 7F | 000100100111 |
9 | 1001 | 9 | 1001 | 128 | 10000000 | 80 | 000100101000 |
10 | 1010 | A | 00010000 | 510 | 111111110 | 1FE | 010100010000 |
11 | 1011 | B | 00010001 | 511 | 111111111 | 1FF | 010100010001 |
12 | 1100 | C | 00010010 | 512 | 1000000000 | 200 | 010100010010 |
13 | 1101 | D | 00010011 | 830 | 1100111110 | 33E | 100000110000 |
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.
(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.
(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
D | B | H | GRAY | D | B | H | GRAY |
---|---|---|---|---|---|---|---|
0 | 0000 | 0 | 0000 | 8 | 1000 | 8 | 1100 |
1 | 0001 | 1 | 0001 | 9 | 1001 | 9 | 1101 |
2 | 0010 | 2 | 0011 | 10 | 1010 | A | 1111 |
3 | 0011 | 3 | 0010 | 11 | 1011 | B | 1110 |
4 | 0100 | 4 | 0110 | 12 | 1100 | C | 1010 |
5 | 0101 | 5 | 0111 | 13 | 1101 | D | 1011 |
6 | 0110 | 6 | 0101 | 14 | 1110 | E | 1001 |
7 | 0111 | 7 | 0100 | 15 | 1111 | F | 1000 |
Teda on sobiv kasutada nt. pöördenurga mõõtmisel. Nurk konverteeritakse otse Gray koodi, vajamata potentsiomeetrit pöördenurga määramiseks.
![]() | ![]() |
Joonis 4.5.3: Gray koodiga ketasandur | Joonis 4.5.4: Binaarkoodiga ketasandur |
3H = 0011B 4H=0100B ; muutub 3 biti olek 3H = 0010G 4H=0110G ; muutub 1 biti olekBinaarkoodi teisendamine Gray koodi toimub järgmise algoritmi järgi:
Gray koodi teisendamine binaarkoodi toimub järgmise algoritmi järgi:
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.
![]() |
![]() |
![]() |
![]() |
---|