Najpreprostejši način za določanje operanda dobimo, če ukaz v polju za določanje operanda vsebuje kar operand sam in ne informacije, kibi opisovala, kje operand je. Ta način imenujemo takojšnje naslavljanje. Operanda, ki je določen s takojšnjim naslavljanjem, pravimo takojšnji operand.
Takojšnje naslavljanje ne zahteva nobenega dodatnega dostopa do pomnilnika in je v tem pogledu najhitrejše. V principu je sicer na mnogih računalnikih možno s programom spreminjati vrednost takojšnjega operanda, vendar to v bistvu pomeni spreminjanje ukaza. To imamo danes za slab način programiranja tako, da se takojšnji operandi uporabljajo praktično izključno za konstante.
Na nekaterih računalnikih je dolžina operandnega polja razmeroma kratka in omejuje velikost operandov. Na drugih pa imamo ukaze z različno dolgimi operandnimi polji, ki omogočajo uporabo takojšnjih operandov brez omejitev.
Za to naslavljanje je značilno, da določilo operanda predstavlja kar enozložni ali dvozložni operand &nhash; torej konstanto. Ta vrsta naslavljanja uporablja znak # pred operandom.
takojšnje naslavljanje
Podatkovni registri Motorole 6800 so: akumulatorja A in B ter statusni register CCR. Ti registri so 8-bitni. Zato zahtevajo za operand eno 8-bitno pomnilniško besedo. Zato je celoten ukaz dolžine dveh pomnilniških besed - prva beseda je operacijska koda, druga pa je operand. Znak # je značilen za to vrsto naslavljanja, znak % pomeni, da je število dvojiško, znak $ pa izdaja šestnastiško število.
ukaz | strojna koda | šestnajstiško | opis |
---|---|---|---|
ADCA #3 | 10001001 00000011 |
89 03 |
Vrednosti v akumulatorju A se prišteje vrednost 3 in vrednost zastavice C iz statusnega regista CCR, rezultat se vpiše v register A. |
ADCB #%111 | 11001001 00000111 |
C9 05 |
Vrednosti v akumulatorju B se prišteje vrednost 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 13(16), rezultat se vpiše v register A. |
ADDB #5 | 11001011 00010011 |
CB 05 |
Vrednosti v akumulatorju B se prišteje vrednost 5, rezultat se vpiše v register B. |
ANDA #13 | 10001000 00001101 |
84 0D |
Izvede se logična operacija IN med akumulatorjem A in vrednostjo 13 (je enako 00001101(2)), rezultat se vpiše v akumulator A. |
ANDB #%11111 | 11001000 00011111 |
C4 1F |
Izvede se logična operacija IN med akumulatorjem B in 00011111(2), rezultat se vpiše v akumulator B. |
BITA #13 | 10000101 00001101 |
85 0D |
Izvede se logična operacija IN med akumulatorjem A in vrednostjo 13 (je enako 00001101(2)), rezultat operacije se vpiše nikamor, spremeni pa se vrednodnost pogojno kodnega registra CCR. |
BITB #%11111 | 11000101 00011111 |
C5 1F |
Izvede se logična operacija IN med akumulatorjem B in 00011111(2), rezultat operacije se vpiše nikamor, spremeni pa se vrednodnost pogojno kodnega registra CCR. |
CMPA #$22 | 10000001 00100010 |
81 22 |
Od vrednosti v akumulatorju A se odšteje vrednost 22(16), rezultat operacije se vpiše nikamor, spremeni pa se vrednodnost pogojno kodnega registra CCR. |
CMPB #%11 | 11000001 00000011 |
C1 03 |
Od vrednosti v akumulatorju B se odšteje vrednost 11(2), rezultat operacije se vpiše nikamor, spremeni pa se vrednodnost pogojno kodnega registra CCR. |
EORA #11 | 10001000 00001011 |
88 0B |
Izvede se logična operacija POSEBNI ALI (antivalenca) med akumulatorjem A in vrednostjo 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 00011001(2), rezultat se vpiše v akumulator B. |
LDAA #$33 | 10000110 00110011 |
86 33 |
Vpiše v akumulator A vrednost 33(16). |
LDAB #%11 | 11001000 00000011 |
C6 3 |
Vpiše v akumulator B vrednost 11(2). |
ORAA #6 | 10001010 00000110 |
8A 06 |
Izvede se logična operacija ALI med akumulatorjem A in vrednostjo 6 (je enako 00000110(2)), rezultat se vpiše v akumulator A. |
ORAB #%1111 | 11001010 00001111 |
CA 0F |
Izvede se logična operacija ALI med akumulatorjem B in vrednostjo 1111(2) (je enako 00001111(2)), rezultat se vpiše v akumulator B. |
SBCA #$A0 | 10000010 10100000 |
82 A0 |
Od vrednosti v akumulatorju A, ki se mu doda kot 9.bit vrednost zastavice C iz statusnega registra CCR, se odšteje vrednost A0(16), rezultat se vpiše v register A. |
SBCB #%111 | 11000010 00010110 |
C2 07 |
Od vrednosti v akumulatorju B, ki se mu doda kot 9.bit vrednost zastavice C iz statusnega registra CCR, se odšteje vrednost 111(2), rezultat se vpiše v akumulator B. |
SUBA #$22 | 10000000 00100010 |
80 22 |
Od vrednosti v akumulatorju A se odšteje vrednost 22(16), rezultat se vpiše v register A. |
SUBB #22 | 11000000 00010110 |
C0 16 |
Od vrednosti v akumulatorju A se odšteje vrednost 22, rezultat se vpiše v register B. |
Po vseh izvedenih ukazih se poveča vrednost v programskem števcu (PC) za 2. Lahko se tudi spremeni statusni register (CCR).
takojšnje naslavljanje
Naslovni registri Motorole 6800 so: programski števec PC, kazalec slada SP in indeksni register X. Ti registri so 16-bitni. 16-bitni podatkovni register M6803 je dvojni register D. Zato zahtevajo za operand dve 8-bitni pomnilniški besedi. Zato je celoten ukaz dolžine treh pomnilniških besed - prva beseda je operacijska koda, druga pa je zgornjih 8-bitov operanda in tretja spodnjih 8-bitov operanda. Znak # je značilen za to vrsto naslavljanja, znak % pomeni, da je število dvojiško, znak $ pa izdaja šestnastiško število.
ukaz | strojna koda | šestnajstiško | opis |
---|---|---|---|
ADDD #$1123 | 11000011 00010001 00100011 |
C3 11 23 |
Registru D (sestavljata ga akumulatorja A in B) se prišteje vrednost 1123(16). Rezultat se shrani v register D. |
CPX #%111110000 | 10001100 0000001 11110000 |
8C 01 F0 |
Primerjanje indeksnega registra z neko vrednostjo. Od vrednosti v akumulatorju X se odšteje vrednost 111110000(2), rezultat operacije se vpiše nikamor, spremeni pa se vrednodnost pogojno kodnega registra CCR. |
JSR #$2200 | 10011101 00100010 00000000 |
9D 22 00 |
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 2268(16). |
LDD #%1 | 11001100 00000000 000000001 |
CC 00 01 |
Vpiše v register D vrednost 1(2). V register A se vpiše zgornji del podatka (v tem primeru 0), v B se vpiše spodnji del podatka (v tem primeru1). |
LDS #3000 | 10001110 00001101 11011000 |
8E 0B B8 |
V kazalec sklada se vpiše vrednost 3000. |
LDX #$F2 | 11000110 00000000 11110010 |
CE 00 F2 |
Vrednost F2(16) se vpiše v indeksni register X. |
SUBD #$1123 | 10000011 00010001 00100011 |
83 11 23 |
Registru D (sestavljata ga akumulatorja A in B) se odšteje vrednost 1123(16). Rezultat se shrani v register D |
Po vseh izvedenih ukazih se poveča vrednost v programskem števcu (PC) za 3. Lahko se tudi spremeni statusni register (CCR).
SERŠ Maribor, Strokovna gimnazija, leto: 2004/05, avtor: Tine Horvat