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

Takojšnje naslavljanje

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 in registri A, B in CCR

takojšnje naslavljanje

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.

Primeri ukazov

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 in registri SP, X , PC (in D)

naslavljanje

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.

Primeri ukazov

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