pri nesposrednem naslavljanju predstavlja določilo operanda naslov operanda. Operand je lahko kjerkoli v pomnilniku. Pri Motoroli 68XX bi torej za vse naslove potrebovali 16-bitni naslov. Ker pa se krajši ukazi izvajajo hitreje, imajo mikroprocesorji 68XX posebnost, ki dovoljuje uporabo 8-bitnih naslovov.
Pri Motoroli 68XX sta dve vrsti neposrednega pomnilniškega naslavljanja:
Neposredno naslavljanje vsebuje en sam zlog določila operanda, kar pomeni, da pokriva le začetne naslove od $00 do $FF. Pri naslovih, ki so krajši od celotnega pomnilniškega naslova, manjkajoči zgornji biti, ki prevzamejo vrednost 0.
neposredno
To naslavljanje je posebnost družine Motorola 68XX. Ti ukazi so v resnici redundanèni, saj bi jih lahko realizirali tudi z neposrednim razširjenim naèinom naslavljanja. Tak ukaz je krajši za eno pomnilniško besedo in s tem hitrejši. Slabost pa je, vendar omogoèa le naslavljanje 256 naslovov (ali od $00 do $FF). Obièajno se na teh naslovih nahajajo vhodno-izhodne naprave in so naslavljanja teh naprav zato hitrejša. Ker so te pomnilniške lokacije priviligirane zaradi hitrejšega dostopa, tudi ni smiselno, da bi bil tukaj program.
Celoten ukaz dolžine dveh pomnilniških besed - prva beseda je operacijska koda, druga pa je operand, ki predstavlja naslov pomnilniške lokacije. Znak % pomeni, da je število dvojiško, znak $ pa izdaja šestnastiško število.
ukaz | strojna koda | šestnajstiško | opis |
---|---|---|---|
ADCA 3 | 10011001 00000011 |
99 03 |
Vrednosti v akumulatorju A se prišteje vrednost, ki se nahaja na lokaciji z naslovom 3, in vrednost zastavice C iz statusnega regista CCR, rezultat se vpiše v register A. |
ADCB %111 | 11011001 00000111 |
D9 05 |
Vrednosti v akumulatorju B se prišteje vrednost, ki se nahaja na lokaciji z naslovom 111(2), in vrednost zastavice C iz statusnega regista CCR, rezultat se vpiše v register B. |
ADDA $13 | 10001011 00010011 |
8B 13 |
Vrednosti v akumulatorju A se prišteje vrednost, ki se nahaja na lokaciji z naslovom 13(16), rezultat se vpiše v register A. |
ADDB 5 | 11011011 00010011 |
DB 05 |
Vrednosti v akumulatorju B se prišteje vrednost, ki se nahaja na lokaciji z naslovom 5, rezultat se vpiše v register B. |
ANDA 13 | 10011000 00001101 |
94 0D |
Izvede se logična operacija IN med akumulatorjem A in vrednostjo, ki se nahaja na lokaciji 13 (je enako 00001101(2)), rezultat se vpiše v akumulator A. |
ANDB %11111 | 11011000 00011111 |
D4 1F |
Izvede se logična operacija IN med akumulatorjem B in vrednostjo, ki se nahaja na lokaciji 00011111(2), rezultat se vpiše v akumulator B. |
BITA 13 | 10010101 00001101 |
95 0D |
Izvede se logična operacija IN med akumulatorjem A in vrednostjo, ki se nahaja na lokaciji 13 (je enako 00001101(2)), rezultat operacije se vpiše nikamor, spremeni pa se vrednodnost pogojno kodnega registra CCR. |
BITB %11111 | 11010101 00011111 |
D5 1F |
Izvede se logična operacija IN med akumulatorjem B in vrednostjo, ki se nahaja na lokaciji 00011111(2), rezultat operacije se vpiše nikamor, spremeni pa se vrednodnost pogojno kodnega registra CCR. |
CMPA $22 | 10090001 00100010 |
91 22 |
Od vrednosti v akumulatorju A se odšteje vrednost, ki se nahaja na lokaciji 22(16), rezultat operacije se vpiše nikamor, spremeni pa se vrednodnost pogojno kodnega registra CCR. |
CMPB %11 | 11010001 00000011 |
D1 03 |
Od vrednosti v akumulatorju B se odšteje vrednost, ki se nahaja na lokaciji 11(2), rezultat operacije se vpiše nikamor, spremeni pa se vrednodnost pogojno kodnega registra CCR. |
EORA 11 | 10011000 00001011 |
98 0B |
Izvede se logična operacija POSEBNI ALI (antivalenca) med akumulatorjem A in vrednostjo, ki se nahaja na lokaciji 11 (je enako 00001011(2)), rezultat se vpiše v akumulator A. |
EORB %11001 | 11001000 00011001 |
C8 19 |
Izvede se logična operacija POSEBNI ALI (antivalenca) med akumulatorjem B in, ki se nahaja na lokaciji 00011001(2), rezultat se vpiše v akumulator B. |
LDAA $33 | 10010110 00110011 |
96 33 |
Vpiše v akumulator A vrednost, ki se nahaja na lokaciji 33(16). |
LDAB %11 | 11011000 00000011 |
D6 3 |
Vpiše v akumulator B vrednost, ki se nahaja na lokaciji 11(2). |
ORAA 6 | 10011010 00000110 |
9A 06 |
Izvede se logična operacija ALI med akumulatorjem A in vrednostjo na lokaciji 6, rezultat se vpiše v akumulator A. |
ORAB %1111 | 11101010 00001111 |
DA 0F |
Izvede se logična operacija ALI med akumulatorjem B in vrednostjo, ki se nahaja na lokaciji 1111(2) (je enako 00001111(2)), rezultat se vpiše v akumulator B. |
STAA $33 | 10010111 00110011 |
97 33 |
Na lokacijo 33(16) se preslika vrednost iz akumulatorja A . |
STAB 33 | 11010111 00100001 |
D7 21 |
Na lokacijo 33 se preslika vrednost iz akumulatorja B. |
SBCA $A0 | 10010010 10100000 |
92 A0 |
Od vrednosti v akumulatorju A, ki se mu doda kot 9.bit vrednost zastavice C iz statusnega registra CCR, se odšteje vrednost, ki se nahaja na lokaciji A0(16), rezultat se vpiše v register A. |
SBCB %111 | 11010010 00010110 |
D2 07 |
Od vrednosti v akumulatorju B, ki se mu doda kot 9.bit vrednost zastavice C iz statusnega registra CCR, se odšteje vrednost, ki se nahaja na lokaciji 111(2), rezultat se vpiše v akumulator B. |
SUBA $22 | 10010000 00100010 |
90 22 |
Od vrednosti v akumulatorju A se odšteje vrednost, ki se nahaja na lokaciji 22(16), rezultat se vpiše v register A. |
SUBB 22 | 11010000 00010110 |
D0 16 |
Od vrednosti v akumulatorju A se odšteje vrednost, ki se nahaja na lokaciji 22, rezultat se vpiše v register B. |
Neposredno naslavljanje 16-bitnih podatkov
ukaz | strojna koda | šestnajstiško | opis |
---|---|---|---|
ADDD $11 | 11010011 00010001 |
D3 11 |
Registru D (sestavljata ga akumulatorja A in B) se prišteje vrednost, ki se nahaja na lokacijah 11(16) (zgornji del) in 12(16) (spodnji del). Rezultat se shrani v register D. |
CPX %11111000 | 10011100 11111000 |
9C F8 |
Primerjanje indeksnega registra z neko vrednostjo. Od vrednosti v akumulatorju X se odšteje vrednost ki se nahaja na lokacijah 11111000(2) (zgornji del) in 11111001(2) (spodnji del), rezultat operacije se vpiše nikamor, spremeni pa se vrednodnost pogojno kodnega registra CCR. |
LDD %1 | 11011100 00000001 |
DC 01 |
Vpiše v register D vrednost, ki se nahaja na lokacijah 1(2) in 10(2). V register A se vpiše zgornji del podatka (v tem primeru z lokacije 1), v B se vpiše spodnji del podatka (v tem primeru z lokacije 2). |
LDS 200 | 10011110 11001000 |
9E C8 |
V kazalec sklada se vpiše vrednost, ki se nahaja na lokacijah 200 in 201. |
LDX $F2 | 11010110 11110010 |
DE 00 F2 |
Vrednost, ki se nahaja na lokacijah F2(16) in F3(16) se vpiše v indeksni register X. |
STD %11 | 11011101 00000011 |
DD 03 |
Register D (sestavljata ga akumulatorja A in B) se shrani na lokaciji 11(2) in 100(2). Zgornjih osem bitov se shrani na lokacijo 11(2) in spodnjih osem bitov na kolkacijo 100(2). |
STS 11 | 10011111 00001011 |
9F 0B |
Kazalec sklada se shrani na lokaciji 11 in 12. Zgornjih osem bitov se shrani na lokacijo 11 in spodnjih osem bitov na kolkacijo 12. |
STX $11 | 10011111 00010001 |
DF 11 |
Indeksni register se shrani na lokaciji 11(16) in 12(16). Zgornjih osem bitov se shrani na lokacijo 11(16) in spodnjih osem bitov na kolkacijo 12(16). |
SUBD $11 | 10010011 00010001 |
93 11 |
Registru D (sestavljata ga akumulatorja A in B) se odšteje vrednost, ki se nahaja na lokacijah 11(16) in 12(16). Rezultat se shrani v register D |
Po vseh izvedenih ukazih se poveča vrednost v programskem števcu (PC) za 2. Lahko se tudi spremeni statusni register (CCR).
SERŠ Maribor, Strokovna gimnazija, leto: 2001, avtor: Niko Fajfar