Näide 2
Sümbolite võtmine tabelist.
Kui programmis pöördutakse märgendi poole nimega Tabel, siis minnakse programmi täitmisega sellele mälu aadressile kus paikneb märgend nimega Tabel. Seega kui antud näites pöördudes märgendi poole Tabel, saadakse tabeli alguse aadressile.
Mikrokontrolleril Atmega88 on kuueteistbitine aadressi ruum. Kuna registrid r16 kuni r31 on kaheksa bitised, siis selleks, et kasutada kuueteistbitist aadressi tuleb kasutada registrit Z. Z register on kuueteist bitine register, mis koosneb kahest kaheksa bitisest registrist r30 ja r31.
Näide 2
;eeldame, et pordid on konfigureeritud õigesti ja vajalikud registrid
defineeritud ning viide on eelnevalt ;valmis kirjutatud
;----------Tabel----------------------------------------------------------------------------------
rjmp Algus ;hüpatakse
programmis kohta nimega Algus, tabel jäetakse programmi täitmisel
vahele
Tabel: ;märgend
programmis, mille järgi on võimalik pöörduda siia kohta programmis
ja siin ;paikneb ühtlasi tabeli esimese sümboli aadress
.db 0xC0,0xF9,0xA4 ;tabeli
sisu
;-----------sümbolite võtmine
tabelist------------------------------------------------------
Algus: ;märgend
programmis, mille järgi on võimalik pöörduda siia kohta programmis
ldi r31, high(Tabel<<1) ;registrisse
r31 pannakse tabeli alguse aadressi kaheksa vanemat bitti
ldi r30, low(Tabel<<1) ;registrisse
r30 pannakse tabeli alguse aadressi kaheksa nooremat bitti
;nüüd
on registris Z tabeli alguse aadress
lpm r16, z ;registris
z olevalt aadressilt võetakse andmed ja pannakse registrisse r16
;---sümboli väljastamine
numbriindikaatorile----------------------------------------------------
out portd, r16 ;registri
r16 sisu saadetakse port D väljundisse
sbi portb, 1 ;pordi B
esimene bitt pannakse üheks
cbi portb, 1 ;pordi B
esimene bitt pannakse nulliks
;---------Lõputu tsükkel
--------------------------------------------------------------------------
Loop: ;tegu
on lõputu tsükliga
rjmp Loop ;see
on tehtud selleks, et programmi täitmine jääks siia pidama
|