Preskoki in zankanje

Primer: - preskok -

Sestavimo program, ki naloži v register D število $52F1. Prišteje naj mu vsebino, ki se nahaja na naslovu $3000! Če je dobljeni rezultat večji od $A111, naj od vsebine registra D odšteje $2FFF in vsebino na naslovu $3004 poveča za ena. Program naj se nahaja v pomnilniku na naslovu $4000, rezultat pa shranimo na naslov $3002.

Za preverjanje programa uporabimo različne vrednosti na naslovu $3002:

  1. majhno število ($30A9) - rezultat bo manjši kot $A111!
  2. srednje število ($7CC2) - rezultat bo večji kot $A111!
  3. veliko število ($D49A) - rezultat bo večji kot $FFFF!

R E Š I T V E


        org   $fffe
        fdb   start
        
        org   $4000
start   LDD   #$52F1
        ADDD  $3000
        SUBD  #$A111
        BLT   konec
        SUBD  #$2FFF
        INC   $3004
konec   STD   $3002
        end

* nastavimo reset vektor
* z začetnim naslovom programa

* nastavimo začetek programa
* naložimo število v register D
* prištejemo vsebino lokacije
* odštejemo $A111 (za primerjavo!)
* če je rezultat odštevanja manjši od 0 - konec!
* sicer odšteje $2FFF,
* poveča vsebino $3004 za 1
* in shrani rezultat!


Program zaženemo trikrat. Po vsakem zagonu nastavimo vrednost na naslovu $3002, $3003 no eno izmed zgornjih treh števil in opazujmo tok programa! Preskok se zgodi le v drugem primeru! Zakaj?

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


Primer: - zankanje -

Sestavimo program, ki naloži v register A število z naslova $3000. Zmanjšuje naj ga za vrednost, ki je vpisana na naslovu $3001 tako dolgo, dokler ni vsebina v A manjša od $1D. Program naj se nahaja v pomnilniku na naslovu $4000, rezultat pa shranimo na naslov $3002.

Za preverjanje programa uporabimo različne vrednosti začetnih števil:

  1. manjše število ($12) - število je manjše od primerjanega!
  2. večje število ($7E) - število je večje od primerjanega!

R E Š I T V E


        org   $fffe
        fdb   start
        
        org   $4000
start   LDAA  $3000
zanka   SUBA  $3001
        SUBA  #$1D
        BLT   konec
        ADDA  #$1D
        BRA   zanka
konec   STAA  $3002
        end

* nastavimo reset vektor
* z začetnim naslovom programa

* nastavimo začetek programa
* naložimo število v register D
* odštejemo vsebino lokacije
* odštejemo $1D (za primerjavo!)
* če je rezultat odštevanja manjši od 0 - konec!
* sicer povrne prejšnjo vsebino v A
* in ponovi zanko
* shrani rezultat!


Program preizkusimo večkrat z različnimi števili za odštevanje in opazujemo počasno in hitro izvajanje zanke! V prvem primeru se zanka najverjetneje ne izvrši! Zakaj?

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


Naloge za reševanje in utrjevanje:

1. naloga: Sestavi program, ki naloži število z naslova $4000 v akumulator A in mu prišteje število $51! Če je rezultat večji kot $70, naj k akumulatorju A prišteje še vsebino lokacije $4001 in ga zmanjša za 2. Program naj se nahaja v pomnilniku na naslovu $3000, rezultat pa shrani na naslov $4002.

2. naloga: Sestavi program, ki naloži akumulator B s številom iz lokacije $5000. Nato naj temu številu v zanki odšteva po 5, akumulator A pa za vsako poveča za 1. Zanka naj se izvaja tako dolgo, da bo v B število manjše od $09. Program naj se nahaja v pomnilniku na naslovu $3000, rezultat (B) shrani na naslov $4001, (A) pa na naslov $4002.