e-gradiva     Sistemi Motorola Omrežja      
  logotip  
SERŠ Maribor Iskanje Primeri

Neposredno pomnilniško naslavljanje

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

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.

m6800_neposredno2.gif

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.

Primeri ukazov

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.

Primeri ukazov za 16-bitne podatke

m6800_neposredno2a.gif

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