Upload
mladenveljkovic
View
54
Download
8
Embed Size (px)
Citation preview
1-1
1.
ARHITEKTURA RAČUNARA I INSTRUKCIJE PROCESORA
Elemente arhitekture računara čine programski dostupni registri, tipovi podataka,
formati instrukcija, načini adresiranja, skup instrukcija i mehanizam prekida.
1.1 Programski dostupni registri
Programski dostupni registri procesora su registri u koje je moguće programskom putem
izvršavanjem instrukcija procesora upisivati vrednosti i iz kojih je moguće programskom
putem izvršavanjem instrukcija procesora očitavati vrednosti. Vrednost koja se u neki od ovih
registara upisuju u nekom od koraka izvršavanja instrukcije koriste se u nekom ili nekim
kasnijim koracima izvršavanja te iste instrukcije, ali ne neke od sledećih instrukcija.
Upisivanje vrednosti u ove registre i čitanje vrednosti iz ovih registara je nemoguće
specificirati instrukcijama. To je određeno usvojenim algoritmima izvršavanja svake
instrukcije posebno. Ovi registri su deo organizacije računara.
Funkcije i broj programski dostupnih registara se razlikije od procesora do procesora.
Ovde se daju oni programski dostupni registri koji se često sreću kod komercijalno
raspoloživih procesora i to programski brojač PC, registri podataka DR, adresni registri AR,
bazni registar BR, indeksni registri XR, registri opšte namene GPR, programska statusna reč
PSW, ukazivač na vrh steka SP i ukazivač na okvir steka FP.
Programski brojač PC je standardni programski brojač procesora čija se vrednost
implicitno koristi kao adresa memorijske lokacije sa koje se čita instrukcija. Vrednost
programskog brojača PC se menja i to implicitno prilikom svakog čitanja instrukcije kada se
vrši inkrementiranje programskog brojača PC i eksplicitno instrukcijama skoka kada se u
programski brojač brojač PC upisuje nova vrednost.
Registri podataka DR se koriste kod registarskog direktnog adresiranja. Registrima
podataka se pristupa programskim putem instrukcijama prenosa i aritmetičkim, logičkim i
pomeračkim instrukcijama. Registri podataka se uvode da bi se ubrzao pristup podacima, tako
1-2
što bi se tokom izvršavanja programa pristupalo podacima u registrima podataka procesora
umesto u memorijskim lokacijama, a rezultat je činjenice da je pristup registrima skoro za red
veličine brži od pristupa memorijskim lokacijama. Korišćenje registara podataka radi
ubrzavanja pristupa podacima ima smisla ukoliko se u toku nekog računanja javi potreba da
se viša puta koristi neki podatak.
Adresni registri AR se koriste kod registarskog indirektnog adresiranja i autoinkrement
i autodekrement načina adresiranja. Adresni registri se uvode da bi se ubrzao pristup
adresama, tako što bi se tokom izvršavanja programa pristupalo adresama u adresnim
registrima procesora umesto u memorijskim lokacijama, a rezultat je činjenice da je pristup
registrima skoro za red veličine brži od pristupa memorijskim lokacijama.
Bazni registri BR se koriste kod baznog i bazno-indeksnog adresiranja. Zbir sadržaja
specificiranog baznog registra i pomeraja kod baznog adresiranja, odnosno baznog registra,
indeksnog registra i pomeraja kod bazno-indeksnog adresiranja, predstavlja adresu
memorijske lokacije na kojoj se nalazi izvorišni ili odredišni operand.
Indeksni registri XR se koriste kod indeksnog i bazno-indeksnog adresiranja. Zbir
sadržaja specificiranog indeksnog registra i pomeraja kod indeksnog adresiranja, odnosno
baznog registra, indeksnog registra i pomeraja kod bazno-indeksnog adresiranja, predstavlja
adresu memorijske lokacije na kojoj se nalazi izvorišni ili odredišni operand.
Registri opšte namene GPR se koriste na isti način kao registri podataka, adresni
registri, bazni registri i indeksni registri. Registri opšte namene GPR se javljaju kod onih
procesora kod kojih ne postoje posebni registri podataka, adresni registri, bazni registri i
indeksni registri. Za razliku od procesora sa posebnim registrima podataka, adresnim
registrima, baznim registrima i indeksnim registrima, gde se registri iz svake grupe registara
koriste samo uz odgovarajuća adresiranja, procesori sa registrima opšte namene mogu da
koriste bilo koji od registara uz bilo koje adresiranje.
Registar PSW je standardna programska statusna reč procesora sastavljena od
određenog broja bitova, koji se obično nazivaju indikatori. Bitovi programske statusne reči
PSW se nezavisno postavljaju i koriste po pravilima definisanim posebno za svaki bit. U
programskoj statusnoj reči PSW postoje dve grupe bitova i to bitovi statusnog i bitovi
upravljačkog karaktera. Na slici 1 je prikazana tipična struktura PSW registra.
Slika 1. Struktura registra PSW
Bitovi statusnog karaktera su:
- N—bit koji se postavlja na 1 u slučaju da je rezultat operacije negativan,
1-3
- Z—bit koji se postavlja na 1 u slučaju da je rezultat operacije jednak 0,
- C—bit koji se postavlja na 1 u slučaju prenosa/pozajmice u aritmetici celobrojnih
veličina bez znaka i
- V—bit koji se postavlja na 1 u slučaju prekoračenja u aritmetici celobrojnih veličina
sa znakom.
Bit upravljačkog karaktera je:
- I—bit koji je jednak 1 ako treba da budu dozvoljeni maskirajući prekidi.
Bitovi statusnog karaktera N, Z, C i V, se postavljaju hardverski na osnovu rezultata
izvršavanja instrukcija, a proveravaju softverski instrukcijama uslovnog skoka. Bitovi
upravljačkog karaktera se postavljaju softverski kao rezultat izvršavanja posebnih instrukcija,
a proveravaju hardverski u saglasnosti sa algoritmom izvršavanja instrukcija.
Registar SP je ukazivač na vrh steka kada je stek je organizovan u operativnoj
memoriji.
Registar SP se pojavljuje u procesorima kao podrška za realizaciju LIFO strukture podataka.
Prilikom upisa u LIFO strukturu podataka ili čitanja iz LIFO strukture podataka sadržaj
registra SP se koristi kao adresa memorijske lokacije u koju treba upisati podatak ili iz koje
treba očitati podatak. Tom prilikom se vrši i ažuriranje i to inkrementiranje ili
dekrementiranje sadržaja registra SP. LIFO strukturu podataka je moguće realizovati na četiri
načina u zavisnosti od toga da li se kod upisa vrši inkrementiranje ili dekrementiranje sadržaja
registra SP, pa se kaže da stek raste prema višim ili prema nižim lokacijama, i da li sadržaj
registra SP ukazuje na zadnju zauzetu lokaciju ili prvu slobodnu lokaciju.
Stek raste prema višim lokacijama a registar SP ukazuje na zadnju zauzetu lokaciju
Kod upisa na stek najpre se vrši inkrementiranje registra SP, pa sa posle toga sadržaj
registra SP koristi kao adresa memorijske lokacije u koju se upisuje. Kod čitanja sa steka
najpre se sadržaj registra SP koristi kao adresa memorijske lokacije sa koje se čita sadržaj, pa
se posle toga vrši dekrementiranje sadržaja registra SP.
Stek raste prema višim lokacijama a registar SP ukazuje na prvu slobodnu lokaciju
Kod upisa na stek najpre se sadržaj registra SP koristi kao adresa memorijske lokacije u
koju se upisuje, pa se posle toga vrši inkrementiranje registra SP. Kod čitanja sa steka najpre
se vrši dekrementiranje sadržaja registra SP, pa se posle toga sadržaj registra SP koristi kao
adresa memorijske lokacije sa koje se čita sadržaj.
Stek raste prema nižim lokacijama a registar SP ukazuje na zadnju zauzetu lokaciju
1-4
Kod upisa na stek najpre se vrši dekrementiranje registra SP, pa sa posle toga sadržaj
registra SP koristi kao adresa memorijske lokacije u koju se upisuje. Kod čitanja sa steka
najpre se sadržaj registra SP koristi kao adresa memorijske lokacije sa koje se čita sadržaj, pa
se posle toga vrši dekrementiranje sadržaja registra SP.
Stek raste prema nižim lokacijama a registar SP ukazuje na prvu slobodnu lokaciju
Kod upisa na stek najpre se sadržaj registra SP koristi kao adresa memorijske lokacije u
koju se upisuje, pa se posle toga vrši dekrementiranje registra SP. Kod čitanja sa steka najpre
se vrši inkrementiranje sadržaja registra SP, pa se posle toga sadržaj registra SP koristi kao
adresa memorijske lokacije sa koje se čita sadržaj.
Ukazivač na okvir steka FP (frame pointer ili base pointer, BP) ukazuje na bazu
okvira (frame-a) koji se formira na steku kod poziva potprograma. Koristi se za pristup:
- parametrima koji se predaju kod poziva potprograma i
- lokalnim promenljivim veličinama kod jezika sa dinamičkim dodeljivanjem
prostora kod ulaska u potprogram i oslobađanjem prostora kod napuštanja
potprograma.
1.2 Instrukcije procesora
Rad procesora je određen instrukcijama koje on izvršava, a koje se zovu mašinske
instrukcije ili računarske instrukcije. Skup različitih instrukcija koje procesor može da izvrši
se zove skup instrukcija procesora. Skup standardnih instrukcija čine instrukcije prenosa,
aritmetičke instrukcije, logičke instrukcije, instrukcije pomeranja i rotiranja, instrukcije skoka
i mešovite instrukcije. U tabeli 1 su date osnovne instrukcije procesora.
Tabela 1. Osnovne instrukcije procesora
Instrukcije
prenosa
MOV a,b Prebacivanje podatka iz jedne lokacije u drugu
IN a,b
Prebacivanje iz registra kontrolora periferije a u registar
procesora b
OUT a,b Prebacivanje iz registra procesora a u registar kontrolora
periferije b
LOAD a Prebacivanje podatka sa lokacije a u akumulator
STORE a Smeštanje podatka iz akumulatora na lokaciju a
PUSH a Podatak sa lokacije a se smešta na stek (može biti i
bezadresna, tada se podrazumeva akumulator kao izvor)
POP a Podatak sa steka se smešta na lokaciju a (može biti i
bezadresna, tada se podrazumeva akumulator kao odredište)
Aritmetičke
instrukcije
ADD a,b,c
ADD a,b
ADD a
Sabiranje operanada sa lokacija a i b i smeštanje na lokaciju
c; kod dvoadresne instrukcije jedan od operanada je i
odredište; kod jednoadresne instrukcije jedan izvor i
1-5
ADD odredište je akumulator; kod bezadresne instrukcije vrh
steka je implicitan izvor i odredište
SUB a,b,c
SUB a,b
SUB a
SUB
Oduzimanje
MUL a,b,c
MUL a,b
MUL a
MUL
Množenje
DIV a,b,c
DIV a,b
DIV a
DIV
Deljenje
INC a,b
INC a
INC
Inkrementiranje operanda sa lokacije a i smeštanje na
lokaciju b; kod jednoadresne instrukcije odredište je
lokacija a, kao i izvor; kod bezadresne instrukcije vrh steka
je implicitno odredište i izvor
DEC a,b
DEC a
DEC
Dekrementiranje
Logičke
instrukcije
AND a,b,c
AND a,b
AND a
AND
Operacija logičko I
OR a,b,c
OR a,b
OR a
OR
Operacija logičko ILI
XOR a,b,c
XOR a,b
XOR a
XOR
Operacija logičko XOR
NOT a,b
NOT a
NOT
Operacija komplementiranja
Instrukcije
pomeranja
ASR a,b
ASR a
ASR
Aritmetičko pomeranje udesno; na mesto novog MSB bita
se upisuje stari MSB bit
ASL a,b
ASL a
ASL
Aritmetičko pomeranje ulevo; na mesto novog LSB bita se
upisuje 0
LSR a,b
LSR a
LSR
Logičko pomeranje udesno; na mesto novog MSB bita se
upisuje 0
LSL a,b
LSL a
LSL
Logičko pomeranje ulevo; na mesto novog LSB bita se
upisuje 0
ROR a,b
ROR a
Rotiranje udesno; na mesto novog MSB bita se upisuje stari
LSB bit
1-6
ROR
ROL a,b
ROL a
ROL
Rotiranje ulevo; na mesto novog LSB bita se upisuje stari
MSB bit
RORC a,b
RORC a
RORC
Rotiranje udesno sa prenosom; na mesto novog MSB bita se
upisuje bit prenosa C, koji je jednak starom LSB bitu
ROLC a,b
ROLC a
ROL
Rotiranje ulevo sa prenosom; na mesto novog LSB bita se
upisuje bit prenosa C, koji je jednak starom LSB bitu
Instrukcije
skoka
JMP a Bezuslovni skok na adresu a, koja se upisuje u PC procesora
kao naredna instrukcija za izvršavanje
JMPIND a Bezuslovni skok na adresu koja je specificirana operandom
a
BEQL a
BNEQ a
BGRTU a
BGREU a
BLSSU a
BLEQU a
BGRT a
BGRE a
BLSS a
BLEQ a
BNEG a
BNNG a
BOVF a
BNVF a
Instrukcije uslovnog skoka u zavisnosti od vrednosti
indikatora u PSW-u; a je pomeraj u odnosu na PC na koji
treba skočiti
JEQL a
JNEQ a
JGRTU a
JGREU a
JLSSU a
JLEQU a
JGRT a
JGRE a
JLSS a
JLEQ a
JNEG a
JNNG a
JOVF a
JNVF a
Instrukcije bezuslovnog skoka u zavisnosti od vrednosti
indikatora u PSW-u; a je adresa na koju se skače
JSR a Skok na potprogram na adresi a
RTS Povratak iz potprograma
INT a Skok na prekidnu rutinu na adresi a
RTI Povratak iz prekidne rutine
1-7
1.2.1 Elementi mašinske instrukcije
Svaka instrukcija mora da sadrži informacije koje procesor zahteva za izvršenje.
Elementi mašinske instrukcije su:
- Kod operacije, koji određuje operaciju koja treba da se izvede. On predstavlja binarni
kod koji jedinstveno određuje svaku operaciju.
- Referenca izvornog operanda, koja obuhvata jedan ili više izvršnih operanada koji se
koriste kao ulazi za izvršenje instrukcija.
- Referenca rezultujućeg operanda, koja obuhvata rezultujući operand, tj. rezultat
izvršenja instrukcije.
- Referenca na sledeću instrukciju, koja govori procesoru gde se nalazi sledeća
instrukcija koju treba izvršiti posle završetka tekuće instrukcije.
Sledeća instrukcija koja treba da se izvrši se nalazi u glavnoj memoriji ili na disku (kod
sistema sa virtuelnom memorijom). U većini slučajeva, sledeća instrukcija koja treba da se
izvrši se nalazi neposredno iza tekuće instrukcije. Na slici 2 je prikazan dijagram stanja
instrukcijskog ciklusa.
Slika 2. Dijagram stanja instrukcijskog ciklusa
Operandi izvora i rezultata mogu da se nalaze u jednoj od sledeće tri oblasti:
1. Glavna ili virtuelna memorija,
2. Registri procesora,
3. U/I uređaji (u slučaju memorijski preslikanog ulaza/izlaza predstavlja adresu u glavnoj
memoriji koja je rezervisana za dati uređaj).
1.2.2 Predstavljanje instrukcija
Unutar računara, svaka instrukcija je predstavljena nizom bitova. Podeljena je na polja
koja odgovaraju elementima instrukcije koji su njen sastavni deo. Jednostavan primer formata
1-8
instrukcije je prikazan na slici 3. Za vreme izvršenja instrukcije, ona se učitava u registar za
instrukcije IR, koji se nalazi u procesoru.
Slika 3. Primer formata instrukcije
Binarno predstavljene mašinske instrukcije su teško razumljive za čoveka. Stoga je
uobičajena praksa da se koristi simboličko predstavljanje mašinskih instrukcija. Operacioni
kodovi se predstavljaju skraćenicama koje se zovu mnemonici i ukazuju na određenu
operaciju. Neki od primera su ADD, SUB, LOAD, POP,…, a primer kompletne instrukcije je:
ADD x,y,z
Jezik u kome se koriste simboličko predstavljene mašinske instrukcije se zove asembler.
1.2.3 Vrste instrukcija
Instrukcije se mogu klasifikovati po operacijama koje izvršavaju i po broju adresnih
polja koje koriste za svoje izvršavanje. Stoga razlikujemo operacije koje se koriste za:
- Obradu podataka (aritmetičke i logičke instrukcije),
- Skladištenje podataka (memorijske instrukcije),
- Pomeranje podataka (U/I instrukcije),
- Upravljanje (testiranje i grananje).
Po broju adresa razlikujemo sledeće operacije:
- Bezadresne (imaju samo kod operacije bez adresa operanada),
- Jednoadresne (imaju kod operacije i prostor za jedan operand),
- Dvoadresne (imaju kod operacije i prostor za dva operanda),
- Troadresne (imaju kod operacije i prostor za tri operanda).
Na slici 4 su upoređene tipične jednoadresne, dvoadresne i troadresne instrukcije, koje
bi mogle da se upotrebe da bi se izračunala vrednost izraza Y = (A – B) / [C + (D * E)]. Sa tri
adrese, svaka instrukcija određuje dve lokacije izvornih operanada i odredišnu lokaciju
operanada. Privremena lokacija T se koristi da se skladište međurezultati, kako ne bismo
menjali sadržaj nijedne od lokacija.
1-9
Slika 4. Programi za izračunavanje izraza Y = (A – B) / [C + (D * E)]
Troadresni formati instrukcija nisu uobičajeni zato što zahtevaju relativno dugačak
format instrukcije da bi se smestile tri adresne reference. Kod dvoadresnih instrukcija i za
binarne operacije, jedna adresa mora da ima dvostruku ulogu, kao operand i kao rezultat.
Prema tome, instrukcija SUB Y, B izvodi računanje Y – B i skladišti rezultat u Y. Dvoadresni
format smanjuje količinu memorije potrebne za smeštanje instrukcija, ali unosi i izvesnu
nezgrapnost. Da bi se izbeglo menjanje vrednosti operanda, koristi se instrukcija MOVE kako
bi se jedna od vrednosti prebacila u lokaciju za rezultat ili privremenu lokaciju pre nego što se
izvede operacija. U ovom primeru, program se širi na šest instrukcija.
Još jednostavnija je jednoadresna instrukcija. Da bi ona radila, druga adresa mora da
bude implicitna. Implicitna adresa je obično registar u procesoru koji se naziva akumulator
(Acc). Akumulator sadrži jedan od operanada i koristi se za skladištenje rezultata. U ovom
primeru, potrebno je osam instrukcija da bi se izvršio zadatak.
Bezadresne instrukcije se mogu koristiti kod računara koji poseduju specijalnu
organizaciju memorije koja se zove stek. Stek je skup lokacija sa kojima se radi po pravilu
LIFO (Last In, First Out), poslednji podatak koji se smesti na stek se prvi čita. Podatak se
smešta na stek instrukcijom PUSH, a uzima sa steka instrukcijom POP.
1.2.4 Vrste operanada
Operandi predstavljaju podatke koji se mogu podeliti u četiri kategorije:
1. Adrese (operand može predstavljati adresu u operativnoj memoriji ili adresu
registra),
2. Brojevi,
3. Znakovi,
4. Logički podaci.
1-10
Brojevi u računaru mogu biti predstavljeni u vidu tri tipa numeričkih podataka:
1. Celi brojevi (brojevi u fiksnom zarezu),
2. Brojevi u pokretnom zarezu,
3. Decimalni brojevi (predstavljeni BCD (engl. Binary Coded Decimal numbers)
kodom).
Znakovi se predstavljaju pomoću binarnih kodova, od kojih je najzastupljeniji 7-bitni
ASCII kod.
Logički podaci u računaru se predstavljaju pomoću jednog bita koji ima vrednost 0 za
netačnu vrednost izraza (false) i 1 za tačnu vrednost izraza (true).
Zadatak 1. Na steku se nalaze simboli A, B, C i D, tako da je A na vrhu steka.
Izračunati vrednost izraza (A3 + B + C) * D i smestiti ga na stek. Koristiti jednu pomoćnu
lokaciju b i naredbe LOAD, STORE, POP, PUSH koje koriste akumulator, kao i jednoadresne
aritmetičke naredbe ADD i MUL, kod kojih je prvi operand u akumulatoru, drugi u memoriji,
a rezultat ostaje u akumulatoru.
Naredba Adresa Komentar
POP (Acc) = A
STORE b (b) = (Acc) = A
MUL b (Acc) = (Acc) * (b) = A * A
MUL b (Acc) = (Acc) * (b) = A * A * A
STORE b (b) = A3
POP (Acc) = B
ADD b (Acc) = (Acc) + (b) = B + A3
STORE b (b) = B + A3
POP (Acc) = C
ADD b (Acc) = C + B + A3
STORE b (b) = C + B + A3
POP (Acc) = D
MUL b (Acc) = D * (C + B + A3)
PUSH
Zadatak 2. Napisati program za izračunavanje izraza (X + Y) * Z – W2, gde se X, Y, Z
i W nalaze u memorijskim ćelijama sa adresama a, b, c i d, respektivno. Program ne sme da
menja sadržaj ovih ćelija. Na raspolaganju je i lokacija e na koju se smešta rezultat, kao i
pomoćna lokacija f. Program napisati za računar koji koristi:
a) jednoadresne naredbe,
1-11
b) dvoadresne naredbe, kod kojih je prva adresa adresa prvog operanda, druga adresa
adresa drugog operanda i adresa na koju se smešta rezultat,
c) troadresne naredbe, kod kojih je prva adresa adresa prvog operanda, druga adresa
adresa drugog operanda, a treća adresa adresa rezultata.
Rešenje:
a)
Instrukcija Komentar
LOAD d (Acc) = W
MUL d (Acc) = (Acc) * (d) = W2
STORE e (e) = W2
LOAD a (Acc) = X
ADD b (Acc) = (Acc) + (b) = X + Y
MUL c (Acc) = (Acc) * (c) = (X + Y) * Z
SUB e (Acc) = (Acc) – (e) = (X + Y) * Z – W2
STORE e (e) = (X + Y) * Z – W2
b)
Instrukcija Komentar
MOVE d,e (e) = W
MUL d,e (e) = (e) * (d) = W2
MOVE b,f (f) = Y
ADD a,f (f) = (a) + (f) = X + Y
MUL c,f (f) = (c) * (f) = (X + Y) * Z
SUB f,e (e) = (f) - (e) = (X + Y) * Z – W2
c)
Instrukcija Komentar
MUL d,d,e (e) = (d) * (d) = W2
ADD a,b,f (f) = (a) + (b) = X + Y
MUL f,c,f (f) = (f) * (c) = (X + Y) * Z
SUB f,e,e (e) = (f) – (e) = (X + Y) * Z – W2
1-12
INSTRUKCIJE GRANJANJA I SKOKA
Instrukcije grananja imaju kao jedan od svojih operanada adresu sledeće instrukcije koja
treba da se izvrši. Ove instrukcije najčešće obuhvataju instrukcije uslovnog grananja. To znači
da se grananje vrši ako se ispuni određeni uslov, u suprotnom se izvršava sledeća instrukcija
po redosledu. Instrukcije grananja u kojima se grananje uvek preduzima zovu se instrukcije
bezuslovnog grananja.
Neke od najčešćih instrukcija skoka (uslovnog grananja) su date u tabeli 1.
Tabela 1. Neke od najčešćih instrukcija skoka
Tip skoka Mnemonik Uslov
Branch if Zero BZ Z = 1
Branch if not Zero BNZ Z = 0
Branch if Carry BC C = 1
Branch if not Carry BNC C = 0
Branch if Negative BN N = 1
Branch if Positive BNN N = 0
Branch if Overflow BV V = 1
Branch if not Overflow BNV V = 0
Kao što se iz tabele 1 vidi, instrukcije skoka se izvršavaju na osnovu stanja indikatora
(flegova) u programskoj statusnoj reči (PSW). Ovde dati mnemonici operacija predstavljaju
interno označavanje koje nema veze ni sa jednom konkretnom arhitekturom.
Na postavljanje indikatora utiču samo aritmetičke i logičke instrukcije, kao i instrukcija
LOAD, dok ostale instrukcije ne postavljaju flegove u PSW-u. Šta to znači? Ako imamo, npr.
instrukciju ADD a,b,c i kao rezultat se dobije 0, tada će se automatski postaviti fleg Z (zero)
na 1. Ukoliko posle toga ide naredba uslovnog skoka, npr. BZ, ona će proveriti tu vrednost i
pošto je Z = 1, skočiti na određeno mesto u kodu. Naravno, ovo je uopšteno poimanje
arhitekture računara, dok se konkretne implementacije mogu razlikovati.
Adresa programskog skoka se u asembleru uglavnom obeležava sa labelom. Labela
predstavlja proizvoljnu alfa-numeričku oznaku koja se piše ispred određene instrukcije.
Labela označava datu instrukciju tako da se može koristiti kao adresa skoka. Primer labele:
L1: ADD a,b,c !instrukcija postavlja flegove u PSW-u
BZ L1 !ako je rezultat 0 (dakle Z = 1), skače se na labelu L1, tj. instrukciju
!ADD
Naredba bezuslovnog skoka JMP označava da se skok mora izvršiti. Ona kao parametar,
takođe, ima labelu na koju se skače.
1-13
Zadatak 3. Napisati program koji množi dva binarna broja A i B koji su smešteni na
lokacijama x i y, respektivno. Na raspolaganju su jednoadresne instrukcije skoka, LOAD,
STORE i ADD, kao i bezadresne instrukcije INC i DEC. Rezultat se smešta na lokaciju w.
Rešenje. Pošto nije dostupna instrukcija MUL, zadatak se rešava sabiranjem broja A
sa samim sobom B puta, ili sabiranjem broja B sa samim sobom A puta. Pri svakom
sabiranju, vrednost broja B, odnosno A, se umanjuje za 1. Sabiranje se vrši sve dok broj B,
odnosno A, ne postane jednak 0.
Labela Instrukcija Adresa Komentar
LOAD #00h Acc 0
STORE w w 0
L1: LOAD w Acc (w)
ADD x Acc (Acc) + (x)
STORE w w (Acc)
LOAD y Acc (y)
DEC Acc (Acc) – 1
STORE y y (Acc)
LOAD y Mora se učitati kako bi se
proverila vrednost indikatora
BNZ L1
Zadatak 4. Napisati program koji vrši celobrojno deljenje brojeva A i B koji se nalaze na
lokacijama x i y, respektivno. Ostatak deljenja se smešta na lokaciju z, a količnik na lokaciju
w. Na raspolaganju su jednoadresne instrukcije skoka, LOAD, STORE, ADD, SUB i
bezadresne instrukcije INC i DEC.
Rešenje. Pošto nije dostupna instrukcija DIV, zadatak se rešava uzastopnim
oduzimanjem delioca od deljenika, sve dok se ne dobije 0 u slučaju da je deljiv bez ostatka, ili
negativan broj, ako je deljiv sa ostatkom. Broj koraka u kojima se kao rezultat oduzimanja
dobija pozitivan broj je rezultat deljenja, a ako se kao rezultat oduzimanja dobije negativan
broj, ostatak se dobija njegovim sabiranjem sa deliocem.
Pr.
17 : 5 = 3 i ostatak 2
17 – 5 = 12 i = 1
12 – 5 = 7 i = 2
7 – 5 = 2 i = 3
2 – 5 = -3 i = 4 -3 < 0 => količnik je i = 3
-3 + 5 = 2 Ostatak je 2
1-14
Komentari:
- Na lokaciji w smo upisali -1, jer će broj ciklusa u kojima se vrši oduzimanje uvek biti
za 1 veći od traženog količnika. Ako bismo ostavili 0, onda bismo po izlasku iz
ciklusa morali da umanjimo sadržaj lokacije w za 1.
- Broj -1 predstavljen u komplementu dvojke u heksadecimalnom zapisu je FF.
Zadatak 5. Napisati program za deljenje dva broja A i B koji se nalaze na lokacijama x i y,
respektivno, sa zaštitom od deljenja sa nulom. Celobrojni rezultat smestiti na lokaciju z. U
slučaju deljenja sa nulom, na lokaciju w upisati 0, a u slučaju ispravnog deljenja upisati 1. Na
raspolaganju je instrukcija DIV, kao i ostale jednoadresne instrukcije i instrukcije skoka.
Labela Instrukcija Adresa Komentar
LOAD #FFh Acc -1
STORE w w -1
LOAD #00h Acc 0
STORE z z 0
L1: LOAD x Acc (x)
SUB y Acc (Acc) – (y)
STORE x x (Acc)
LOAD w Acc (w)
INC Acc (Acc) + 1
STORE w w (Acc)
LOAD x Acc (x)
BNN L1
ADD y Acc (Acc) + (y)
STORE z z (Acc)
Labela Instrukcija Adresa Komentar
LOAD y Acc (y)
BZ L1
LOAD x Acc (x)
DIV y Acc (Acc) / (y)
STORE z z (Acc)
LOAD #01h Acc 1
STORE w w (Acc)
JMP L2 preskaču se sledeće
dve naredbe
L1: LOAD #00h Acc 0
STORE w w (Acc)
L2:
1-15
Komentar:
- Prilikom uslovnog grananja (analogno if naredbi u programskom jeziku C), samo
jedna od mogućnosti se može izvršavati (da ili ne). Ukoliko je broj B jednak 0, uslov
naredbe BZ je ispunjen i skače se na labelu L1, čime se preskače deo koda kada uslov
nije ispunjen, što je u redu. Ukoliko uslov nije ispunjen, program nastavlja sukcesivno
da izvršava instrukciju po instrukciju (LOAD, DIV, STORE,…) i da nismo stavili
JMP L2, program bi izvršio i naredbe LOAD #00h i STORE w, a to ne sme da uradi.
Zbog toga je stavljena instrukcija JMP L2, kako bi se u tom slučaju navedene dve
instrukcije preskočile.
16
NAČINI ADRESIRANJA
Referenca operanda u instrukciji sadrži ili stvarnu vrednost operanda (neposrednu) ili
referencu na adresu operanda. U raznim skupovima instrukcija koristi se širok spektar
različitih načina adresiranja. Načini adresiranja obuhvataju direktno (adresa operanda je u
polju adrese), indirektno (polje adrese pokazuje na lokaciju koja sadrži adresu operanda),
registarsko, registarsko indirektno i razne oblike adresiranja sa pomerajem, u kojima se
vrednost u registru dodaje vrednosti adrese da bi se proizvela adresa operanda.
Format instrukcije definiše raspored polja u instrukciji. Dizajn formata instrukcije je
složen zadatak, koji obuhvata razmatranja kao što su dužina instrukcije, fiksna ili promenljiva
dužina, broj bitova dodeljenih kodu operacije i svakoj referenci operanda i kako se određuje
način adresiranja.
Adresno polje, ili polja, u tipičnom formatu instrukcije su relativno mala. Željeni cilj je
da se referencira širok opseg lokacija u glavnoj ili virtuelnoj memoriji. Da bi se postigao taj
cilj, primenjuju se razne tehnike adresiranja. Sve one podrazumevaju neki kompromis između
opsega adresa, sa jedne strane, i/ili fleksibilnosti izračunavanja adrese, sa druge strane.
Polazeći od činjenice da se pri izvršavanju programa, programski kod koji realizuje
algoritam rešenja i podaci koji se pri tome obrađuju nalaze u operativnoj memoriji koncept
adresiranja u prvom nivo se realizuje na relaciji procesor - operativna memorija. S obzirom
da se podaci koji se obrađuju mogu kod nekih arhitektura naći i u skupu registara potrebno je
definisati da li se adresa koju generiše procesor odnosi na operativnu memoriju, skup
registara ili je operand neposredno dat u instrukciji. Tako se dolazi do podele adresiranja na
osnovu značenja izvršne adrese na:
Memorijsko adresiranje;
Registarsko adresiranje;
Neposredno adresiranje.
Dalje, memorijsko i registarsko adresiranje mogu biti direktno i indirektno. Direktno
označava da se operand nalazi na lokaciji čija je adresa specificirana u instrukciji. Indirektno
adresiranje označava da se operand nalazi na adresi čija je adresa specificirana u instrukciji.
17
Polazeći od opšteg formata instrukcije, koji sadrži sva tri adresna polja može da se uoči
problem sa prostorom u memoriji koji bi u njoj zauzeo program sastavljen od takvih
instrukcija. Tražeći moguća rešenja ovog problema dolazi se do mogućeg odgovora koji se
bazira na instrukcijama sa manjim brojem adresnih polja. Time se dolazi do druge podele
adresiranja na:
Eksplicitno adresiranje – instrukcija eksplicitno sadrži sve adrese potrebne za
identifikovanje lokacija gde se nalaze operandi i lokacije gde se pamti rezultat;
Implicitno adresiranje – instrukcija ima manji broj adresnih polja, što znači da je
neka od adresa implicitno specificirana. To podrazmeva da mora postojati
mehanizam koji ukazuje ovakve situacije i po pravilu je ugrađen u kod operacije
preko tzv. bitova modifikacije.
Implicitno adresiranje se najdirektnije uočava razmatranjem podele instrukcije prema
broju adresnih polja u formatu instrukcije.
Na osnovu načina formiranja izvršne adrese, načini adresiranja se mogu podeliti na:
Apsolutno i
Relativno.
Kod apsolutnog načina adresiranja ne postoje dodatne operacije kako bi se odredila
izvršna adresa. Kod relativnog načina adresiranja, uglavnom se moraju odraditi neke
aritmetičke operacije nad određenim poljima instrukcije i sadržajima određenih registara
kako bi se dobila izvršna adresa.
Najzastupljenije tehnike adresiranja su:
- Neposredno,
- Memorijski direktno,
- Memorijski indirektno,
- Registarsko,
- Registarsko indirektno,
- Adresiranje sa pomerajem,
- Adresiranje pomoću steka.
Ovi načini adresiranja su ilustrovani na slici 5. Notacija podrazumeva sledeće:
A – sadržaj polja adrese u instrukciji,
R – sadržaj polja adrese u instrukciji koji referencira (upućuje na) registar
EA – stvarna (efektivna) adresa lokacije koja sadrži referencirani operand,
(X) – sadržaj memorijske lokacije X ili registra X.
18
Slika 5. Načini adresiranja
U tabeli 2 su prikazani načini dobijanja adrese operanda za svaki od načina adresiranja.
Tabela 2. Načini dobijanja adrese operanda za svaki od načina adresiranja
Način
adresiranja
Algoritam Glavna
prednost
Glavni nedostatak
Neposredno Operand = A Nema reference
memorije
Ograničena veličina
operanda
Memorijski
direktno
EA = A Jednostavno Ograničen adresni
prostor
Memorijski
indirektno
EA = (A) Veliki adresni
prostor
Višestruke reference
memorije
Registarsko
direktno
EA = R Nema reference
memorije
Ograničen adresni
prostor
Registarsko
indirektno
EA = (R) Veliki adresni
prostor
Dodatna memorijska
referenca
Sa
pomerajem
EA = A + (R) Fleksibilnost Složenost
Pomoću
steka
EA = vrh
steka
Nema reference
memorije
Ograničena
primenljivost
19
Skoro sve arhitekture računara obezbeđuju više od jednog od tih načina adresiranja.
Postavlja se pitanje kako procesor može da odredi koji način adresiranja se koristi u određe-
noj instrukciji. Preduzima se više pristupa. Često će različiti kodovi operacije koristiti
različite načina adresiranja. Takođe, jedan ili više bitova u formatu instrukcije mogu da se
upotrebe kao polje za način adresiranja. Vrednost polja za način adresiranja određuje koji se
način koristi.
U sistemu bez virtuelne memorije, efektivna adresa će biti ili adresa u glavnoj memoriji
ili registar. Stvarno preslikavanje na fizičku adresu je funkcija mehanizma straničenja i
nevidljivo je za programera.
Način adresiranja se može specificirati kao poseban deo instrukcije, u okviru koda
operacije, ili kao zasebno polje (slika 6). Takođe, veličina prenosa (bajt, polureč, reč,…) se
može specificirati u instrukciji.
Slika 6. Specificiranje načina adresiranja kao dela instrukcije
1.3 Neposredno adresiranje
Najjednostavniji oblik adresiranja je neposredno adresiranje, u kome je vrednost
operanda prisutna u instrukciji (slika 7).
Operand = A
Slika 7. Neposredno adresiranje
Taj način može da se upotrebi da definiše i koristi konstante ili da postavlja početne
vrednosti promenljivih. Tipično, broj će biti uskladišten u obliku komplementa dvojke;
krajnji levi bit polja za operand se koristi kao bit predznaka. Kada se operand učita u registar
za podatke, bit predznaka se proširuje nalevo do potpune veličine reči podatka.
20
Primer.
Prednost neposrednog adresiranja je što nema drugih referenci memorije sem donošenja
instrukcije koje se zahteva da bi se dobio operand, pa se prema tome štedi jedan ciklus
memorije ili keša u ciklusu instrukcije. Nedostatak je što je veličina broja ograničena
dimenzijom polja za adresu, koja je, u većini skupova instrukcija, mala u poređenju sa
dužinom reči.
1.4 Memorijski direktno adresiranje
Memorijski direktno adresiranje je veoma jednostavan oblik adresiranja, u kome polje
za adresu sadrži efektivnu adresu operanda (slika 8):
EA = A
Slika 8. Memorijski direktno adresiranje
Ta tehnika je bila uobičajena u ranijim generacijama računara, ali se ne sreće često u
savremenim arhitekturama. Zahteva samo jednu referencu memorije i nema posebnih
izračunavanja. Očigledno ograničenje je to što obezbeđuje samo ograničen adresni prostor.
Primer.
21
1.5 Memorijski indirektno adresiranje
Kod memorijski direktnog adresiranja, dužina polja za adrese je obično manja od
dužine reči, što ograničava adresni opseg. Jedno rešenje je da se u adresnom polju referencira
na adresu reči u memoriji, koja sa svoje strane sadrži adresu operanda potpune dužine. To je
poznato kao memorijski indirektno adresiranje (slika 9):
EA = (A)
Slika 9. Memorijski indirektno adresiranje
Kao što je ranije definisano, zagrade se tumače kao značenje sadržaja. Očigledna
prednost tog pristupa je da je sada, za dužinu reči od N, na raspolaganju prostor od 2N.
Nedostatak je što izvršenje instrukcije zahteva dve reference memorije da bi se dobio
operand: jednu da se dobije njegova adresa i drugu da se dobije njegova vrednost.
Mada je broj reči koje mogu da se adresiraju sada jednak 2N, broj različitih efektivnih
adresa koje mogu da se referenciraju u bilo kom trenutku je ograničen na 2k gde je k dužina
polja za adrese. Tipično, to nije toliko neugodno ograničenje kao što bi se moglo pomisliti i
čak može da bude prednost.
Retko korišćena varijanta memorijski indirektnog adresiranja je adresiranje u više nivoa
ili kaskadno indirektno adresiranje:
EA = (...(A)...)
22
U tom slučaju, jedan od bitova adrese pune reči je indirektni marker (I). Ako je bit I
jednak 0, onda reč sadrži EA. Ako je bit I jednak 1, onda se poziva drugi nivo indirektnosti.
Izgleda da nema neke naročite prednosti tog pristupa, a njegov nedostatak je to što bi se
zahtevalo tri ili više memorijskih referenci da bi se dobio operand.
1.6 Registarsko direktno adresiranje
Registarsko adresiranje je slično memorijski direktnom adresiranju. Jedina razlika je to
što adresno polje referencira registar, a ne adresu u glavnoj memoriji (slika 10):
EA = R
Slika 10. Registarsko direktno adresiranje
Radi razjašnjenja, ako je sadržaj registarskog adresnog polja u instrukciji 5, onda je
registar R5 nameravana adresa, a vrednost operanda se nalazi u R5. Tipično, adresno polje
koje referencira adrese imaće od 3 do 5 bitova, tako da može da se referencira od 8 do 32
registra opšte namene.
Prednosti registarskog adresiranja su što se (1) zahteva samo malo adresno polje u
instrukciji i (2) što se ne zahtevaju nikakve memorijske reference koje troše vreme. Vreme
pristupa memoriji za registar koji se nalazi unutar procesora je mnogo manje od onoga za
pristup glavnoj memoriji. Nedostatak registarskog adresiranja je što je adresni prostor veoma
ograničen.
Primer.
Ako se u skupu instrukcija mnogo koristi registarsko adresiranje, to nagoveštava da će
se mnogo koristiti registri procesora. Zbog strogog ograničenja broja registara (u poređenju
23
sa lokacijama glavne memorije), njihova upotreba na taj način ima smisla samo ako se koriste
efikasno. Ako se svaki operand donosi u registar iz glavne memorije, jednom izvrši operacija
i zatim vraća u glavnu memoriju, tada se dodaje nepotreban međukorak. Ako, umesto toga,
operand u registru ostaje u upotrebi za više operacija, onda se postiže stvarna ušteda. Primer
je međurezultat u proračunu. Posebno, pretpostavite da algoritam za množenje u
komplementu dvojke treba da se implementira u softveru.
Na programeru je da odluči koje vrednosti bi trebalo da ostanu u registrima, a koje bi
trebalo skladištiti u glavnoj memoriji. Većina savremenih procesora ima registre opšte
namene, što teret efikasnog izvršenja prebacuje na programera u asemblerskom jeziku
(odnosno, programera kompajlera).
1.7 Registarsko indirektno adresiranje
Baš kao što je registarsko direktno adresiranje analogno memorijski direktnom
adresiranju, registarsko indirektno adresiranje je analogno memorijski indirektnom
adresiranju. U oba slučaja, jedina razlika je da li adresno polje referencira memorijsku
lokaciju ili registar. Prema tome, za registarsku indirektnu adresu (slika 11),
EA = (R)
Slika 11. Registarsko indirektno adresiranje
Prednosti i ograničenja registarskog indirektnog adresiranja su u osnovi ista kao za
indirektno adresiranje. U oba slučaja, ograničenje adresnog prostora (ograničen opseg adresa)
polja za adrese prevazilazi se poljem kojim se obraća na lokaciju dužine reči u kojoj se nalazi
adresa. Pored toga, registarsko indirektno adresiranje koristi jednu memorijsku referencu
manje od indirektnog adresiranja.
Primer.
24
1.8 Adresiranje sa pomerajem
Veoma moćan način adresiranja kombinuje sposobnosti direktnog i registarskog indi-
rektnog adresiranja. On je poznat pod raznim nazivima koji zavise od konteksta njegove
upotrebe, ali osnovni mehanizam je isti. Mi ćemo se na njega pozivati kao na adresiranje sa
pomerajem (engl. displacement addressing, slika 12):
EA = A + (R)
Slika 12. Adresiranje sa pomerajem
Adresiranje sa pomerajem zahteva da instrukcija ima dva adresna polja, od kojih je
najmanje jedno eksplicitno. Vrednost koja se sadrži u jednom adresnom polju (vrednost A)
koristi se direktno. Drugo adresno polje, ili implicitna referenca zasnovana na kodu operacije,
odnosi se na registar čiji sadržaj se dodaje A da bi se proizvela efektivna adresa.
Primer.
25
Opisaćemo tri najčešće upotrebe adresiranja sa pomerajem:
- relativno adresiranje;
- adresiranje sa baznim registrom;
- indeksiranje.
Relativno adresiranje. Za relativno adresiranje, koje se takođe zove i adresiranje relativno
prema PC, implicitno referencirani registar je programski brojač (PC). Odnosno, adresa
sledeće instrukcije dodaje se adresnom polju da bi se proizvela EA. Tipično, sa adresnim
poljem se za ovu operaciju postupa kao sa brojem u komplementu dvojke. Prema tome,
efektivna adresa je pomeraj relativan u odnosu na adresu instrukcije.
Relativno adresiranje koristi koncept lokalnosti. Ako je većina referenci memorije
relativno bliska instrukciji koja se izvršava, onda upotreba relativnog adresiranja štedi
adresne bitove u instrukciji.
Adresiranje sa baznim registrom. Za adresiranje sa baznim registrom postoji sledeće
tumačenje: referencirani registar sadrži adresu u glavnoj memoriji, a adresno polje sadrži
pomeraj (obično u predstavljanju neoznačenog celog broja) od te adrese. Referenca registra
može biti eksplicitna ili implicitna.
Adresiranje sa osnovnim registrom takođe koristi lokalnost memorijskih referenci. U
nekim implementacijama, koristi se jedan segmentni osnovni registar da drži osnovnu adresu
segmenta, a instrukcije moraju eksplicitno da ga referenciraju. U tom poslednjem slučaju, ako
je dužina adresnog polja K, a broj mogućih registara N, onda jedna instrukcija može da
referencira bilo koju od N oblasti od po 2K reči.
Indeksiranje. Za indeksiranje, tipično tumačenje je sledeće: adresno polje referencira adresu
u glavnoj memoriji, a referencirani registar sadrži pozitivan pomeraj od te adrese. Obratite
pažnju na to da je ta upotreba upravo suprotna od tumačenja za adresiranje sa baznim
registrom. Naravno, to je više nego samo stvar korisnikovog tumačenja. Zbog toga što se
adresno polje smatra memorijskom adresom u indeksiranju, ono obično sadrži više bitova od
adresnog polja u uporedivoj instrukciji sa osnovnim registrom. Svejedno, metoda proračuna
EA je ista i za adresiranje sa osnovnim registrom i za indeksiranje, a u oba slučaja referenca
registra je ponekad eksplicitna, a ponekad implicitna (za različite vrste procesora).
26
Slika 13. Primena indeksiranja u radu sa nizovima
Značajna upotreba indeksiranja je da obezbedi efikasan mehanizam za izvođenje
iterativnih operacija (slika 13). Razmotrite, na primer, listu brojeva koji su uskladišteni
počevši od lokacije A. Pretpostavite da bismo želeli da dodamo 1 svakom elementu na listi.
Treba da donesemo svaku vrednost, dodamo joj 1 i opet je uskladištimo nazad. Sekvenca
efektivnih adresa koje su nam potrebne je A, A + 1, A + 2,..., sve do poslednje lokacije na
listi. Sa indeksiranjem, to se lako uradi. Vrednost A se uskladišti u adresno polje instrukcije,
a izabrani registar, koji se zove indeksni registar, inicijalizuje se na 0. Posle svake operacije,
indeksni registar se povećava za 1.
Zbog toga što se indeksni registar obično koristi za takve iterativne zadatke, tipično je
da postoji potreba za povećavanjem ili smanjivanjem indeksnog registra posle svake
reference na njega. Imajući u vidu da je to česta operacija, neki sistemi je rade automatski,
kao deo istog instrukcijskog ciklusa. To je poznato kao autoindeksiranje. Ako su izvesni
registri posvećeni isključivo indeksiranju, onda se autoindeksiranje može pozvati implicitno i
automatski. Ako se koriste registri opšte namene, može biti potrebno da se operacija
autoindeksiranja signalizira pomoću jednog bita u instrukciji. Autoindeksiranje koje koristi
povećavanje može da se opiše na sledeći način:
EA = A + (R)
(R) ← (R) + 1
U nekim mašinama, obezbeđeni su i indirektno adresiranje i indeksiranje, a moguće je
primeniti i oba u istoj instrukciji. Postoje dve mogućnosti: indeksiranje se izvodi pre ili posle
indirekcije.
Ako se indeksiranje izvodi posle indirekcije, to se zove postindeksiranje:
EA = (A) + (R)
27
Prvo se koristi sadržaj adresnog polja da bi se pristupilo memorijskoj lokaciji koja
sadrži direktnu adresu. Ta adresa se onda indeksira vrednošću registra. Ta tehnika je korisna
za pristupanje jednom od izvesnog broja blokova podataka fiksnog formata. Operacije koje se
izvode su iste, bez obzira na to kojim blokom se manipuliše. Prema tome, adrese instrukcija
koje referenciraju blok bi mogle da pokažu na lokaciju (vrednost A) koja sadrži promenljivi
pokazivač na početak bloka za upravljanje procesom. Indeksni registar sadrži pomeraj unutar
bloka.
Kod preindeksiranja, indeksiranje se izvodi pre indirekcije:
EA = (A + (R))
Adresa se proračunava kao kod jednostavnog indeksiranja. Međutim, u ovom slučaju,
izračunata adresa ne sadrži operand, nego adresu operanda. Primer upotrebe te tehnike je
kada se konstruiše tabela grananja na više putanja. U određenoj tački u programu, može
postojati grananje na jednu od nekoliko lokacija, zavisno od uslova. Može da se uspostavi
tabela koja počinje na lokaciji A. Indeksiranjem u toj tabeli, može da se pronađe zahtevana
lokacija.
Skup instrukcija tipično ne sadrži i preindeksiranje i postindeksiranje.
1.9 Adresiranje pomoću steka
Poslednji način adresiranja koji razmatramo je adresiranje pomoću steka. Stek je
rezervisan blok lokacija. Stavke se dodaju na vrh steka tako da je, u svakom datom trenutku,
blok delimično popunjen. Steku je pridružen pokazivač, čija vrednost je adresa vrha steka.
Alternativno, dva gornja elementa steka mogu da budu u registrima procesora, u kom slučaju
pokazivač steka referencira treći element steka. Pokazivač steka se održava u registru. Prema
tome, reference na lokacije steka u memoriji su, ustvari, registarske indirektne adrese.
Način adresiranja pomoću steka je oblik implicitnog adresiranja. Mašinske instrukcije
ne uključuju memorijsku referencu, nego implicitno rade na vrhu steka.
Zadatak 6. Na slici je prikazan sadržaj registara procesora i dela memorije neposredno
pre izvršavanja neke instrukcije. Odrediti sadržaj registara i memorije posle sukcesivnog
izvršavanja tri instrukcije. Instrukcije su jednoadresne i dužine dva bajta, gde prvi bajt
označava kod operacije i način adresiranja, dok drugi bajt predstavlja operand, osim
instrukcije POP koja je bezadresna i dužine jedan bajt. Adrese i operandi su osmobitni i
prikazani u heksadecimalnom formatu u komplementu dvojke. Pokazivač steka SP pokazuje
28
na adresu memorijske lokacije koja se nalazi na vrhu steka. Čitanjem podatka sa steka SP se
inkrementira, a upisom na stek SP se dekrementira.
Procesor
PC 4A
Acc 07
SP 8B
Adresa Sadržaj memorije
48 LOAD Memorijski indirektno
49 6A
4A POP Bezadresna
4B SUB Neposredno
4C 2F
4D STORE Memorijski direktno
4E 69
…………………
69 3F
6A 78
…………………
8B 1C
Instrukcija Komentar Sadržaj registara procesora
nakon instrukcije
Sadržaj memorije
nakon instrukcije
POP (Acc) 1C (PC) = 4B (uvećava se za
jedan bajt)
(Acc) = 1C
(SP) = 8C
Isti (kod operacija
prenosa, podaci se
uglavnom ne brišu, već
se kopiraju)
SUB #2F (Acc) (Acc)
– 2F = ED
(PC) = 4D (uvećava se za dva
bajta)
(Acc) = ED
(SP) = 8C
Isti
STORE 69 (Mem:69) =
(Acc) = ED
(PC) = 4F
(Acc) = ED
(SP) = 8C
Sadržaj lokacije 69 je ED
Zadatak 7. Na slici je prikazan sadržaj registara procesora i dela memorije neposredno
pre izvršavanja neke instrukcije. Odrediti sadržaj registara i memorije posle sukcesivnog
izvršavanja četiri instrukcije. Instrukcije su jednoadresne i dužine dva bajta, gde prvi bajt
označava kod operacije i način adresiranja, dok drugi bajt predstavlja operand, osim
instrukcija PUSH i POP koje su bezadresne i dužine jedan bajt. Adrese i operandi su
29
osmobitni i prikazani u heksadecimalnom formatu u komplementu dvojke. Pokazivač steka
SP pokazuje na adresu memorijske lokacije koja se nalazi na vrhu steka. Čitanjem podatka sa
steka SP se dekrementira, a upisom na stek SP se inkrementira.
Procesor
PC 48
Acc 07
SP 8B
R1 A4
BR 69
Instrukcija Komentar Sadržaj registara
procesora nakon
instrukcije
Sadržaj
memorije nakon
instrukcije
LOAD [6A] (Acc) 25 (PC) = 4A
(Acc) = 25
(SP) = 8B
Isti
ADD R1 (Acc) (Acc) + A4 = C9 (PC) = 4C
(Acc) = C9
(SP) = 8B
Isti
PUSH (stek) (Acc) = C9 (PC) = 4D
(Acc) = C9
(SP) = 8C
Sadržaj lokacije
8C je C9
STORE 02[BR] (Mem:69 + 02) = (Mem:6B) =
(Acc) = C9
(PC) = 4F
(Acc) = C9
(SP) = 8C
Sadržaj lokacije
8C je C9
Sadržaj lokacije
6B je C9
Adresa Sadržaj memorije
48 LOAD Memorijski indirektno
49 6A
4A ADD Registarsko direktno
4B R1
4C PUSH Bezadresna
4D STORE Bazno sa pomerajem
4E 02
4F POP Bezadresna
…………………
69 3F
6A 78
6B 4C
…………………
78 25
…………………
8B 1C
8C 23