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

Načini naslavljanja

Vsak ukaz računalnika mora vsebovati poleg informacije o operaciji tudi informacije o operandu, oziroma operandih. Operandi so običajno, čeprav ne vedno, podani z naslovi, na katerih se nahajajo. Za načine, s katerimi je v ukazu podana informacija o operandih, se je zato uveljavil izraz naslavljanje (addressing). Ukazi MC68XX imajo različne dolžine in zasedajo v pomnilniku najmanj eno in največ tri lokacije.

Tako poznamo eno, dvo ali trozložne ukaze. Vsi ukazi MC68XX vsebujejo informacijo o operaciji vedno v prvi besedi ukaza, v operacijski kodi. Informacija o operandih je lahko podana na več načinov, kar imenujemo različni načini naslavljanja. Izraz naslavljanje uporabljamo zato, ker je operand običajno določen z naslovom pomnilniške lokacije, kjer se nahaja. Operandi so pri MC68XX lahko v pomnilniku (zaradi pomnilniško preslikanega vhoda-izhoda to vključuje tudi registre vhodno-izhodni naprav) in v registrih CPE. Informacija o načinu naslavljanja je vsebovano v operacijski kodi ukaza, pri 8 bitni operacijski kodi pa je možnih največ 256 različnih ukazov.

Čeprav gre v vseh primerih za isto operacijo, so ukazi glede na odločitve operanda različni in imajo vsak svojo operacijsko kodo, nekateri pa tudi različne dolžine. MC6803 pozna 82 različnih operacij, ker pa vsaki operaciji pripada več ukazov, glede na način naslavljanja, je vseh ukazov 220. Možnih je sicer 256 ukazov, vendar jih je do tega 34 nedoločenih, dva pa uporablja proizvajalec v testne namene. Število različnih načinov naslavljanja je pri današnjih računalnikih pogosto veliko, tudi 10 ali več. Zanje uporabljajo proizvajalci različna imena, ki so pogosto različna za v bistvu enake načine.

Vsebovano naslavljanje

Pri tem načinu naslavljanja so operandi v notranjih registrih CPE ali pa na skladu. Ukaz vedno zavzema eno samo pomnilniško besedo. Ukazi te vrste ne poznajo drugega načina naslavljanja.

Oblika ukaza

naslavljanje

naslavljanje

V zbirnem jeziku pri teh ukazih napišemo samo mnemonik ukaza, npr. INCA, ker je operand določen že s samo operacijo in ga ni potrebno posebej navajati.

Primeri ukazov

ukazstrojna kodašestnajstiškoopis
ABA000110111BSešteje vrednost registra A in registra B in shrani rezultat v register A.
ABX001110103ASešteje vrednost registra X in registra B, ki mu doda zgornjih osem bitov z vrednostjo 0 in shrani rezultat v register X.
ASLA0100100048Bite od 0 do 6 registra A 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.
ASLB0101100058Bite od 0 do 6 registra B 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.
ASRA0100011147Bite od 1 do 7 registra A premakne za eno mesto v desno, bit 7 ostane nespremenjen, vrednost bita 0 se prenese v zastavico C pogojno kodnega registra CCR.
ASRB0101011157Bite od 1 do 7 registra B premakne za eno mesto v desno, bit 7 ostane nespremenjen, vrednost bita 0 se prenese v zastavico C pogojno kodnega registra CCR.
CBA0001000111Primerja vrednost registra A z vrednostjo registra B. Od vrednosti registra A se odšteje vrednost registra B, rezultat se ne shrani, spremeni pa se vrednost CCR.
CLC000011000C V zastavico C (prenos) v CCR se vpiše vrednost 0.
CLI000011100EOmogoči se prekinitvena maska. V zastavico I (prekinitvena maska) v CCR se vpiše vrednost 0.
CLRA010011114FV register A se vpiše vrednost 0.
CLRB010111115FV register B se vpiše vrednost 0.
CLV000010100A V zastavico V (preliv) v CCR se vpiše vrednost 0.
COMA0100001143Nad vrednostjo registra A se izvedede logična negacija (eniški komplement).
COMB0101001153Nad vrednostjo registra B se izvedede logična negacija (eniški komplement).
DAA0001100119Šestnajstiško število se pretvori v število BCD.
DECA010010104AVrednost registra A se zmanjša za 1.
DECB010110105AVrednost registra B se zmanjša za 1.
INCA010011004CVrednost registra A se poveča za 1.
INCB010111005CVrednost registra B se poveča za 1.
INS0011000131Vrednost registra S (kazalec sklada) se poveča za 1.
INX0000100008Vrednost registra X (indeksni) se poveča za 1.
LSLA0100100048Bite od 0 do 6 registra A 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.
LSLB0101100058Bite od 1 do 7 registra B 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.
LSLD0000010105Bite od 0 do 14 registra D premakne za eno mesto v levo, na mesto bita 0 vpiše vrednost 0, bit 13 se prenese v zastavico C pogojno kodnega registra CCR.
LSRA0100010044Bite od 1 do 7 registra A 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.
LSRB0101010054Bite od 1 do 7 registra B 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.
LSRD0000010054Bite od 1 do 15 registra B premakne za eno mesto v desno, na mesto bita 15 vpiše vrednost 0, vrednost bita 0 se prenese v zastavico C pogojno kodnega registra CCR.
NEGA0100000040Nad vrednostjo registra A se izvedede aritmetična negacija (dvojiški komplement).
NEGB0100000050Nad vrednostjo registra B se izvedede aritmetična negacija (dvojiški komplement).
NOP0000000101Ne naredi nič. Ukaz se uporablja v testne namene. Programski števec se poveča.
PSHA0011011036Vrednost registra A se preslika na lokacijo, ki je enaka vrednosti v SP (kazalcu sklada). Vrednost v kazalcu sklada se zmanjša za 1.
PSHB0011011137Vrednost registra B se preslika na lokacijo, ki je enaka vrednosti v SP (kazalcu sklada). Vrednost v kazalcu sklada se zmanjša za 1.
PSHX001111003CVrednost zgornjih osem bitom registra X se preslika na lokacijo, ki sta enaka vrednosti v SP zmanjšano za vrednost 1 (SP-1) in vrednost spodnjih osem bitom registra X se preslika na lokacijo, ki sta enaka vrednosti v SP . Vrednost v kazalcu sklada se zmanjša za 2.
PULA0011001032Vrednost lokacije, ki je enaka vrednosti v SP (kazalcu sklada), povečano za vrednost 1 (SP+1), se preslika v register A. Vrednost v kazalcu sklada se poveča za 1.
PULB0011001133Vrednost lokacije, ki je enaka vrednosti v SP (kazalcu sklada), povečano za vrednost 1 (SP+1), se preslika v register B. Vrednost v kazalcu sklada se poveča za 1.
PULX0011100038Vrednost lokacije, ki je enaka vrednosti v SP (kazalcu sklada), povečano za vrednost 1 (SP+1), se preslika v zgornjih osem bitov registra X. Vrednost lokacije, ki je enaka vrednosti v SP (kazalcu sklada), povečano za vrednost 2 (SP+2), se preslika v spodnjih osem bitov registra X. Vrednost v kazalcu sklada se poveča za 2.
ROLA0100100149Bite od 0 do 6 registra A 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.
ROLB0101100159Bite od 0 do 6 registra B 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.
RORA0100011046Bite od 1 do 7 registra A 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.
RORB0101011056Bite od 1 do 7 registra B 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.
RTI001110113BVrnitev iz prekinitve. Iz skalda se pobere vrednosti za PC, X, CCR, A in B. Vrednost v kazalcu sklada se poveča za 7.
RTS0011100139Vrnitev iz podprograma. Vrednost lokacije, ki je enaka vrednosti v SP (kazalcu sklada), povečano za vrednost 1 (SP+1), se preslika v zgornjih osem bitov registra PC. Vrednost lokacije, ki je enaka vrednosti v SP (kazalcu sklada), povečano za vrednost 2 (SP+2), se preslika v spodnjih osem bitov registra PC. Vrednost v kazalcu sklada se poveča za 2.
SBA0001000010Od vrednosti registra A se odšteje vrednost registra B, rezultat se shrani v register A.
SEC000011000D V zastavico C (prenos) v CCR se vpiše vrednost 1.
SEI000011110FOnemogoči se prekinitvena maska. V zastavico I (prekinitvena maska) v CCR se vpiše vrednost 1.
SEV000010110BV zastavico V (preliv) v CCR se vpiše vrednost 1.
SWI001111113FProgramska prekinitev. Na skad se skranjijo A, B, CCR, X in PC. Vrednost SP se zmanjša za 7. V Programski števec se vpišejo vrednosti z lokacij FFF8(16) in FFF9(16).
TAB0001011016Vrednost registra A se preslika v register B.
TAP0000011006Vrednost registra A se preslika v register CCR.
TBA0001011117Vrednost registra B se preslika v register A.
TPA0000011006Vrednost registra CCR se preslika v register A.
TSTA010011014DPrimerja vrednost registra A z vrednostjo 0. Od vrednosti registra A se odšteje vrednost 0, rezultat se ne shrani, spremeni pa se vrednost CCR.
TSTB010111015DPrimerja vrednost registra B z vrednostjo 0. Od vrednosti registra B se odšteje vrednost 0, rezultat se ne shrani, spremeni pa se vrednost CCR.
TSX0011000030Vrednost v kazalcu sklada (SP) se poveča za 1 in se preslika v indeksni register (X).
TXS0011010135Vrednost indeksnega registra (X) se zmanjša za 1 in se preslika v kazalec sklada (SP).

Po vseh izvedenih ukazih se poveča vrednost v programskem števcu (PC) za 1. Lahko se tudi spremeni statusni register (CCR).

SERŠ Maribor, Strokovna gimnazija, leto: 2004/05, avtor: Boštjan Ferk