Pri Motoroli 68XX sta dve vrsti neposrednega pomnilniškega naslavljanja:
Običajno prevajalnik izbere pravilno vrsto naslavljanja.
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
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.
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 $3232 | 01111000 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 999 | 01111111 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 $AAA | 01110011 00001010 10101010 | 73 0A AA | Nad vrednostjo pomniliniške lokacije AAA(16),se izvedede logična negacija (eniški komplement). |
DEC $2233 | 01111010 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 12 | 01111100 00000000 00001100 | 7C 00 0C | Vrednost na lokaciji 12 se poveča za 1. |
JMP 2 | 01111110 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 $23 | 01111000 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 $44 | 01110100 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 %111 | 01110000 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 %11 | 01111001 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 5 | 01110110 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 %101 | 01111101 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. |
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č