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

Neposredno pomnilniško naslavljanje

Pri Motoroli 68XX sta dve vrsti neposrednega pomnilniškega naslavljanja:

Običajno prevajalnik izbere pravilno vrsto naslavljanja.

Razširjeno naslavljanje

Neposredno naslavljanje vsebuje dve pomnilniški lokaciji za določila operanda, kar pomeni, da pokriva lvse pomnilniške naslove od 0000 do (16)FFFF(16). Pri naslovih, ki so nižje od 100(16) se to naslavljanje ne uporablja, saj se lahko ukaz hitreje realizira z neposrednim naslavljanjem.

Razširjeno naslavljanje

Razširjeno naslavljanje

Ukazi razširjenega naslavljanja so za eno pomnilniško lokacijo daljši od neposrednega naslavljanja in s tem počasnejši. Dobra lastnost pa je, da omogoča le naslavljanje celotnega naslovnega prostora M68XX.

Celoten ukaz dolžine treh pomnilniških besed - prva beseda je operacijska koda, druga je zgornji del naslova pomnilniške lokacije in tretja je spodnji del naslova 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 303 10111001
00000001
00101111
B9
01
2F
Vrednosti v akumulatorju A se prišteje vrednost, ki se nahaja na lokaciji z naslovom 303, in vrednost zastavice C iz statusnega regista CCR, rezultat se vpiše v register A.
ADCB %100001111 11111001
00000001
00001111
F9
07
0F
Vrednosti v akumulatorju B se prišteje vrednost, ki se nahaja na lokaciji z naslovom 100001111(2), in vrednost zastavice C iz statusnega regista CCR, rezultat se vpiše v register B.
ADDA $AA13 10101011
10101010
00000011
BB
AA
13
Vrednosti v akumulatorju A se prišteje vrednost, ki se nahaja na lokaciji z naslovom AA13(16), rezultat se vpiše v register A.
ADDB 500 11111011
00000001
11110100
FB
1
F4
Vrednosti v akumulatorju B se prišteje vrednost, ki se nahaja na lokaciji z naslovom 500, rezultat se vpiše v register B.
ANDA $C213 10111000
11000010
00010011
B4
C2
13
Izvede se logična operacija IN med akumulatorjem A in vrednostjo, ki se nahaja na lokaciji C213(16), rezultat se vpiše v akumulator A.
ANDB %1000011000 11110100
00000010
00011000
F4
02
18
Izvede se logična operacija IN med akumulatorjem B in vrednostjo, ki se nahaja na lokaciji 1000011000(2), rezultat se vpiše v akumulator B.
ASL $323201111000
00110010
00110010
78
32
32
Bite od 0 do 6 pomnilniške lokacije 3232(16) premakne za eno mesto v levo, na mesto bita 0 vpiše vrednost 0, bit 7 se prenese v zastavico C pogojno kodnega registra CCR.
BITA 9913 10110101
00100110
10111001
B5
26
B9
Izvede se logična operacija IN med akumulatorjem A in vrednostjo, ki se nahaja na lokaciji 9913 rezultat operacije se vpiše nikamor, spremeni pa se vrednodnost pogojno kodnega registra CCR.
BITB %101001111 11110101
0000001
01001111
F5
01
4F
Izvede se logična operacija IN med akumulatorjem B in vrednostjo, ki se nahaja na lokaciji 101001111(2), rezultat operacije se vpiše nikamor, spremeni pa se vrednodnost pogojno kodnega registra CCR.
CLR 99901111111
00000011
11100111
7F
03
E7
V lokacijo 999 se vpiše vrednost 0.
CMPA $2233 10110001
00100010
00110011
B1
22
33
Od vrednosti v akumulatorju A se odšteje vrednost, ki se nahaja na lokaciji 2233(16), rezultat operacije se vpiše nikamor, spremeni pa se vrednodnost pogojno kodnega registra CCR.
CMPB %110000000 11110001
00000001
10000000
F1
01
80
Od vrednosti v akumulatorju B se odšteje vrednost, ki se nahaja na lokaciji 110000000(2), rezultat operacije se vpiše nikamor, spremeni pa se vrednodnost pogojno kodnega registra CCR.
COM $AAA01110011
00001010
10101010
73
0A
AA
Nad vrednostjo pomniliniške lokacije AAA(16),se izvedede logična negacija (eniški komplement).
DEC $223301111010
00100010
00110011
7A
22
33
Vrednost na lokaciji 2233(16) se zmanjša za 1.
EORA 1111 10011000
00000100
01010111
B8
04
57
Izvede se logična operacija POSEBNI ALI (antivalenca) med akumulatorjem A in vrednostjo, ki se nahaja na lokaciji 1111, rezultat se vpiše v akumulator A.
EORB %1100 11111000
00010001
00000000
F8
11
00
Izvede se logična operacija POSEBNI ALI (antivalenca) med akumulatorjem B in, ki se nahaja na lokaciji 1100(16), rezultat se vpiše v akumulator B.
INC 1201111100
00000000
00001100
7C
00
0C
Vrednost na lokaciji 12 se poveča za 1.
JMP 201111110
00000000
00000010
7E
00
02
Vrednost na lokaciji 2 se kopira v programski števec PC.
JSR $2268 10111101
00100010
01101000
BD
22
68
Skok na podprogram. Na sklad se shrani programski števec: na lokacijo SP se shrani spodnji del programskega števca, na lokacijo SP-1 se shrani zgornji del progrmaskega števca. V programski števec se vpiše vrednost, ki je na lokaciji 2268(16).
LDAA $333 10110110
00000011
00110011
B6
03
33
Vpiše v akumulator A vrednost, ki se nahaja na lokaciji 333(16).
LDAB $3333 10111000
00110011
00110011
B6
33
33
Vpiše v akumulator B vrednost, ki se nahaja na lokaciji 3333(16).
LSL $2301111000
00000000
00100011
78
00
23
Bite od 0 do 6 registra pomnilniške lokacije 23(16) premakne za eno mesto v levo, na mesto bita 0 vpiše vrednost 0, bit 7 se prenese v zastavico C pogojno kodnega registra CCR.
LSR $4401110100
00000000
01000100
74
00
44
Bite od 1 do 7 lokacije 44(16) premakne za eno mesto v desno, na mesto bita 7 vpiše vrednost 0, vrednost bita 0 se prenese v zastavico C pogojno kodnega registra CCR.
NEG %11101110000
00000000
00000111
70
00
07
Nad vrednostjo lokacije 111(2) se izvedede aritmetična negacija (dvojiški komplement).
ORAA $666 11011010
00000110
01100110
BA
06
66
Izvede se logična operacija ALI med akumulatorjem A in vrednostjo na lokaciji 666(16), rezultat se vpiše v akumulator A.
ORAB $1111 11111010
00010001
00010001
FA
11
11
Izvede se logična operacija ALI med akumulatorjem B in vrednostjo, ki se nahaja na lokaciji 1111(16), rezultat se vpiše v akumulator B.
ROL %1101111001
00000000
00000011
79
00
03
Bite od 0 do 6 pomnilniške lokacije 11(2) premakne za eno mesto v levo, na mesto bita 0 vpiše vrednost iz zastavice C pogojno kodnega registra CCR, bit 7 se prenese v zastavico C pogojno kodnega registra CCR.
ROR 501110110
00000000
00000101
76
00
05
Bite od 1 do 7 pomnilniške lokacije 5 premakne za eno mesto v desno, na mesto bita 7 vpiše vrednost iz zastavice C pogojno kodnega registra CCR, vrednost bita 0 se prenese v zastavico C pogojno kodnega registra CCR.
SBCA $A011 10110010
10100000
00010001
B2
A0
11
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 A011(16), rezultat se vpiše v register A.
SBCB $111 11110010
00000001
00010001
F2
01
11
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(16), rezultat se vpiše v akumulator B.
STAA $33AA 10110111
00110011
10101010
B7
33
AA
Na lokacijo 33AA(16) se preslika vrednost iz akumulatorja A .
STAB 33333 11110111
10000010
00110101
F7
82
35
Na lokacijo 33333 se preslika vrednost iz akumulatorja B .
SUBA $ABCD 10110000
10101011
11001101
B0
AB
CD
Od vrednosti v akumulatorju A se odšteje vrednost, ki se nahaja na lokaciji ABCD(16), rezultat se vpiše v register A.
SUBB 22222 11110000
01010110
11001110
F0
56
CE
Od vrednosti v akumulatorju A se odšteje vrednost, ki se nahaja na lokaciji 22222, rezultat se vpiše v register B.
TST %10101111101
00000000
00000101
7D
00
05
Primerja vrednost, ki se nahaja na lokaciji 101(2). Od vrednosti, ki je na lokaciji 101(2) se odšteje vrednost 0, rezultat se ne shrani, spremeni pa se vrednost CCR.

Primeri ukazov za 16-bitne podatke

m6800_neposredno3a.gif

Razširjeno naslavljanje 16-bitnih podatkov

ukaz strojna koda šestnajstiško opis
ADDD $1111 11110011
00010001
00100011
F3
11
11
Registru D (sestavljata ga akumulatorja A in B) se prišteje vrednost, ki se nahaja na lokacijah 1111(16) (zgornji del) in 1112(16) (spodnji del). Rezultat se shrani v register D.
CPX $1111 10111100
00010001
00010001
BC
11
11
Primerjanje indeksnega registra z neko vrednostjo. Od vrednosti v akumulatorju X se odšteje vrednost ki se nahaja na lokacijah 1111(16) (zgornji del) in 1112(16) (spodnji del), rezultat operacije se vpiše nikamor, spremeni pa se vrednodnost pogojno kodnega registra CCR.
LDD 10000 11111100
00100111
00010000
FC
27
10
Vpiše v register D vrednost, ki se nahaja na lokacijah 10000 in 100001. V register A se vpiše zgornji del podatka (v tem primeru z lokacije 10000), v B se vpiše spodnji del podatka (v tem primeru z lokacije 10001).
LDS 2000 11011110
00000111
11010000
BE
07
D0
V kazalec sklada se vpiše vrednost, ki se nahaja na lokacijah 2000 in 2001.
LDX $F2CA 11110110
11110010
11000010
FE
00
F2
Vrednost, ki se nahaja na lokacijah F2CA(16) in F2CB(16) se vpiše v indeksni register X.
STD $AA11 11111101
10101010
00010001
FD
AA
11
Register D (sestavljata ga akumulatorja A in B) se shrani na lokaciji AA11(16) in AA12(16). Zgornjih osem bitov (akumulator A) se shrani na lokacijo AA11(16) in spodnjih osem bitov (akumulator B) na lokacijo AA12(16).
STS $FEDC 10111111
11111110
11011100
BF
FE
DC
Kazalec sklada se shrani na lokaciji FEDC(16) in FEDC(16). Zgornjih osem bitov se shrani na lokacijo FEDC(16) in spodnjih osem bitov na lokacijo FEDC(16).
STX 9876 11111111
00100110
10010100
FF
26
94
Indeksni register se shrani na lokaciji 9876 in 9877. Zgornjih osem bitov se shrani na lokacijo 9876 in spodnjih osem bitov na kolkacijo 9877.
SUBD $1F1F 10110011
00011111
00011111
B3
1F
1F
Registru D (sestavljata ga akumulatorja A in B) se odšteje vrednost, ki se nahaja na lokacijah 1F1F(16) in 1F20(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: 2002, avtor: Matej Vogrinčič