Odštevanje z različnimi načini naslavljanja

Primer:

Sestavimo program, ki izračuna razliko dveh števili, vsako dolžine 2 bajta (prvo $A31D in drugo $627C)! Program naj se nahaja v pomnilniku na naslovu $5000, rezultat pa shranimo na naslov $8004.

Uporabimo različne načine naslavljanja!

  1. takojšnje: podatke vpišemo v program kot del operacijske kode
  2. neposredno: podatki se nahajajo v pomnilniku na naslovu $8000
  3. posredno: podatki se nahajajo v pomnilniku na naslovu $8000

R E Š I T V E


1. takojšnje naslavljanje (#)
 
        org   $fffe
        fdb   start

        org   $5000
start   LDD   #$A31D
        SUBD  #$627C
        STD   $8004
        end

* nastavimo reset vektor
* z začetnim naslovom programa

* nastavimo začetek programa
* naložimo prvo 2-bajtno število
* odštejemo drugo 2-bajtno število
* in rezultat shranimo


2. neposredno naslavljanje
 
        org   $fffe
        fdb   start

        org   $8000
        fdb   $A31D
        fdb   $627C

        org   $5000
start   LDD   $8000
        SUBD  $8002
        STD   $8004
        end


* nastavimo reset vektor
* z začetnim naslovom programa

* podatke vstavimo v pomnilnik
* prvo število
* drugo število

* nastavimo začetek programa
* naložimo prvo število iz pomn. lokacije
* odštejemo drugo število iz pomn. lokacije
* in rezultat shranimo

3. posredno naslavljanje (?,X)
 
        org   $fffe
        fdb   start

        org   $8000
        fdb   $A31D
        fdb   $627C

        org   $5000
start   LDX   #$8000
        LDD   0,X
        SUBD  2,X
        STD   4,X
        end

* nastavimo reset vektor
* z začetnim naslovom programa

* podatke vstavimo v pomnilnik
* prvo število
* drugo število

* nastavimo začetek programa
* naložimo indeksni register z naslovom podatkov
* naložimo prvo število brez odmika naslova
* odštejemo drugo število z odmikom za 2 bajta
* in rezultat shranimo z odmikom štirih bajtov



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


Naloge za reševanje in utrjevanje:

1. naloga: Sestavi program, ki izračuna razliko dveh enobajtnih števil (prvo $CD in drugo $51)! Program naj se nahaja v pomnilniku na naslovu $4000, rezultat pa shrani na naslov $6000.
Uporabi takojšnje, neposredno in posredno naslavljanje, za izvedbo programa pa uporabi akumulator A (primeri zgoraj)! Ugotovi, kako veliko mora biti drugo število, da dobimo napačen rezultat!

2. naloga: Sestavi program, ki zbriše akumulator B in A. Nato zmanjšaj A za 4. Vsebino akumulatorja A prenesi v B in B pomanjšaj za 3. Povečaj A za 1, nato uporabi ukaz NEGB in nakoncu seštej A in B. Uporabljati smeš le vsebovano naslavljanje. Program naj se nahaja v pomnilniku na naslovu $4000. Kolik je rezultat v akumulatorju A?