Podprogrami in uporaba sklada

Primer: - podprograma za kvadriranje in seštevanje -

Sestavimo program, ki izračuna kvadratno (a*a) vrednost desetih števil, ki so zapisana po vrsti od naslova $3000 dalje (0,1,2,3,4,5,6,7,8,9). Izračun enačbe naj se izvrši v podprogramu. Rezultate zapišimo na mesto števil. Z drugim podprogramom izračunaj vsote parov kvadratov števil (prvi + drugi rez., tretji + četrti rez. ...). Ta podprogram naj se nahaja na naslovu $5000, rezultati pa na $3010. Program naj se nahaja v pomnilniku na naslovu $4000. Pazi na nastavitev kazalca sklada! ($F000)

R E Š I T V E


        org   $fffe
        fdb   start

        org   $3000
x0      fcb   0
x1      fcb   1
x2      fcb   2
x3      fcb   3
x4      fcb   4
x5      fcb   5
x6      fcb   6
x7      fcb   7
x8      fcb   8
x9      fcb   9

        org   $3010
r1      rmb   1
r2      rmb   1
r3      rmb   1
r4      rmb   1
r5      rmb   1

        org   $5000
sestej  LDX   #$3010
        ABX
        PSHX
        LDX   #$3000
        TAB
        ABX
        LDAA  0,x
        LDAB  1,x
        ABA
        PULX
        STAA  0,x
        RTS

        org   $4000
start   LDS   #$F000
        LDX   #$3000
nasl_x2 LDAA  0,x
        BSR   kvadrat
        STAA  0,x
        INX
        CPX   #$300A
        BNE   nasl_x2

        CLRA
        CLRB
nasl_s  PSHA
        PSHB
        JSR   sestej
        PULB
        PULA
        INCA
        INCA
        INCB
        CMPB  #5
        BNE   nasl_s

konec   BRA   konec

kvadrat TAB
        MUL
        TBA
        RTS

        end

* nastavimo reset vektor
* z začetnim naslovom programa

* nastavimo začetek podatkov
* podatek in rešitev kvadrata za x=0
* podatek in rešitev kvadrata za x=1
* podatek in rešitev kvadrata za x=2
* podatek in rešitev kvadrata za x=3
* podatek in rešitev kvadrata za x=4
* podatek in rešitev kvadrata za x=5
* podatek in rešitev kvadrata za x=6
* podatek in rešitev kvadrata za x=7
* podatek in rešitev kvadrata za x=8
* podatek in rešitev kvadrata za x=9

* nastavimo začetek rešitev seštevanj
* rešitev prvega seštevanja
* rešitev drugega seštevanja
* rešitev tretjega seštevanja
* rešitev četrtega seštevanja
* rešitev petega seštevanja

* nastavimo začetek drugega podprograma
* naložimo naslov za shranjevanje rezultatov
* prišteje odmik za trenutno rešitev
* shrani naslov za rešitev v sklad
* naložimo naslov podatkov
* odmik prestavi v B!
* prišteje odmik, kjer so trenutni podatki
* naloži prvi podatek za seštevanje
* naloži drugi podatek za seštevanje
* ju sešteje
* vzame prej shranjeni naslov rezultata
* in shrani rezultat
* vrnitev iz podprograma

* nastavimo začetek programa
* najprej pripravimo sklad!
* naložimo naslov za podatkov
* naloži število za kvadriranje
* kliče podprogram, ki izvrši kvadriranje
* shrani rezultat
* propravi X za shranjevanje naslednjega rezultata
* ponavlja izračun enačbe,
* dokler ne izračuna 10 rezultatov

* pripravi odmik podatkov za naslednji podprogram
* pripravi odmik rezultatov za naslednji podprogram
* ter ju
* shrani v sklad
* kliče podprogram za seštevanje in hranjenje rezultata
* obnovi prej
* pripravljena odmika
* odmik podatkov poveča
* za dva (oba seštevanca!)
* odmik rezultatov poveča za ena
* in ponavlja, dokler
* ne izračuna 5 rezultatov

* za konec neskončna zanka

* število postavi še v B
* in izvrši množenje A*B
* rezultat (1 bajt) vrne v A
* vrnitev iz podprograma


Med delovanjem programa opazujemo tok programa (skoki v podprograme in nazaj) in spreminjanje stanja kazalca sklada (lahko tudi vsebino sklada v pomnilniku!).

K O N E C     R E Š I T E V


Naloge za reševanje in utrjevanje:

1. naloga: Sestavi program, ki v podprogramu prišteje 5 k številom, ki se nahajajo od naslova $2000 dalje (števila so: 3,7,15,2,9,22). V podprogramu se izvrši le seštevanje, shranjevanje rezultata izvrši v glavnem programu in sicer na mesto števila. Program naj se nahaja v pomnilniku na naslovu $ 3000. Preizkusi delovnje BSR in JSR (ugotovi razliko!).

2. naloga: Sestavi program, ki v podprogramu pomnoži s 4 števila, ki se nahajajo od naslova $1000 dalje (števila so: 1,3,5,7,9,8,6,4,2). V podprogramu se izvrši množenje in shranjevanje rezultata v dolžini enega bajta in sicer na mesto števila. Program naj se nahaja v pomnilniku na naslovu $5000, podprogram pa na naslovu $4000. Preizkusi delovnje BSR in JSR!