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