-
4-1
4.
ARHITEKTURA RAUNARA I INSTRUKCIJE PROCESORA
Elemente arhitekture raunara ine programski dostupni registri, tipovi podataka, formati
instrukcija, naini adresiranja, skup instrukcija i mehanizam prekida.
4.1 Programski dostupni registri
Programski dostupni registri procesora su registri u koje je mogue programskom putem
izvravanjem instrukcija procesora upisivati vrednosti i iz kojih je mogue programskom putem
izvravanjem instrukcija procesora oitavati vrednosti. Vrednost koja se u neki od ovih registara
upisuju u nekom od koraka izvravanja instrukcije koriste se u nekom ili nekim kasnijim
koracima izvravanja te iste instrukcije, ali ne neke od sledeih instrukcija. Upisivanje vrednosti
u ove registre i itanje vrednosti iz ovih registara je nemogue specificirati instrukcijama. To je
odreeno usvojenim algoritmima izvravanja svake instrukcije posebno. Ovi registri su deo
organizacije raunara.
Funkcije i broj programski dostupnih registara se razlikije od procesora do procesora. Ovde
se daju oni programski dostupni registri koji se esto sreu kod komercijalno raspoloivih
procesora i to programski broja PC, registri podataka DR, adresni registri AR, bazni registar
BR, indeksni registri XR, registri opte 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 brojaa PC se menja i to implicitno prilikom svakog itanja instrukcije kada se vri
inkrementiranje programskog brojaa PC i eksplicitno instrukcijama skoka kada se u programski
broja broja PC upisuje nova vrednost.
-
4-2
Registri podataka DR se koriste kod registarskog direktnog adresiranja. Registrima
podataka se pristupa programskim putem instrukcijama prenosa i aritmetikim, logikim i
pomerakim instrukcijama. Registri podataka se uvode da bi se ubrzao pristup podacima, tako
to bi se tokom izvravanja programa pristupalo podacima u registrima podataka procesora
umesto u memorijskim lokacijama, a rezultat je injenice da je pristup registrima skoro za red
veliine bri od pristupa memorijskim lokacijama. Korienje registara podataka radi ubrzavanja
pristupa podacima ima smisla ukoliko se u toku nekog raunanja javi potreba da se via puta
koristi neki podatak.
Adresni registri AR se koriste kod registarskog indirektnog adresiranja i autoinkrement i
autodekrement naina adresiranja. Adresni registri se uvode da bi se ubrzao pristup adresama,
tako to bi se tokom izvravanja programa pristupalo adresama u adresnim registrima procesora
umesto u memorijskim lokacijama, a rezultat je injenice da je pristup registrima skoro za red
veliine bri od pristupa memorijskim lokacijama.
Bazni registri BR se koriste kod baznog i bazno-indeksnog adresiranja. Zbir sadraja
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 izvorini ili odredini operand.
Indeksni registri XR se koriste kod indeksnog i bazno-indeksnog adresiranja. Zbir
sadraja 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 izvorini ili odredini operand.
Registri opte namene GPR se koriste na isti nain kao registri podataka, adresni registri,
bazni registri i indeksni registri. Registri opte 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 odgovarajua
adresiranja, procesori sa registrima opte namene mogu da koriste bilo koji od registara uz bilo
koje adresiranje.
Registar PSW je standardna programska statusna re procesora sastavljena od odreenog
broja bitova, koji se obino nazivaju indikatori. Bitovi programske statusne rei PSW se
nezavisno postavljaju i koriste po pravilima definisanim posebno za svaki bit. U programskoj
-
4-3
statusnoj rei PSW postoje dve grupe bitova i to bitovi statusnog i bitovi upravljakog karaktera.
Na slici 1 je prikazana tipina struktura PSW registra.
Slika 1. Struktura registra PSW
Bitovi statusnog karaktera su:
- Nbit koji se postavlja na 1 u sluaju da je rezultat operacije negativan,
- Zbit koji se postavlja na 1 u sluaju da je rezultat operacije jednak 0,
- Cbit koji se postavlja na 1 u sluaju prenosa/pozajmice u aritmetici celobrojnih
veliina bez znaka i
- Vbit koji se postavlja na 1 u sluaju prekoraenja u aritmetici celobrojnih veliina sa
znakom.
Bit upravljakog karaktera je:
- Ibit koji je jednak 1 ako treba da budu dozvoljeni maskirajui prekidi.
Bitovi statusnog karaktera N, Z, C i V, se postavljaju hardverski na osnovu rezultata
izvravanja instrukcija, a proveravaju softverski instrukcijama uslovnog skoka. Bitovi
upravljakog karaktera se postavljaju softverski kao rezultat izvravanja posebnih instrukcija, a
proveravaju hardverski u saglasnosti sa algoritmom izvravanja instrukcija.
Registar SP je ukaziva na vrh steka kada je stek je organizovan u operativnoj memoriji.
Registar SP se pojavljuje u procesorima kao podrka za realizaciju LIFO strukture podataka.
Prilikom upisa u LIFO strukturu podataka ili itanja iz LIFO strukture podataka sadraj registra
SP se koristi kao adresa memorijske lokacije u koju treba upisati podatak ili iz koje treba oitati
podatak. Tom prilikom se vri i auriranje i to inkrementiranje ili dekrementiranje sadraja
registra SP. LIFO strukturu podataka je mogue realizovati na etiri naina u zavisnosti od toga
da li se kod upisa vri inkrementiranje ili dekrementiranje sadraja registra SP, pa se kae da stek
raste prema viim ili prema niim lokacijama, i da li sadraj registra SP ukazuje na zadnju
zauzetu lokaciju ili prvu slobodnu lokaciju.
Stek raste prema viim lokacijama a registar SP ukazuje na zadnju zauzetu lokaciju
Kod upisa na stek najpre se vri inkrementiranje registra SP, pa sa posle toga sadraj
registra SP koristi kao adresa memorijske lokacije u koju se upisuje. Kod itanja sa steka najpre
-
4-4
se sadraj registra SP koristi kao adresa memorijske lokacije sa koje se ita sadraj, pa se posle
toga vri dekrementiranje sadraja registra SP.
Stek raste prema viim lokacijama a registar SP ukazuje na prvu slobodnu lokaciju
Kod upisa na stek najpre se sadraj registra SP koristi kao adresa memorijske lokacije u
koju se upisuje, pa se posle toga vri inkrementiranje registra SP. Kod itanja sa steka najpre se
vri dekrementiranje sadraja registra SP, pa se posle toga sadraj registra SP koristi kao adresa
memorijske lokacije sa koje se ita sadraj.
Stek raste prema niim lokacijama a registar SP ukazuje na zadnju zauzetu lokaciju
Kod upisa na stek najpre se vri dekrementiranje registra SP, pa sa posle toga sadraj
registra SP koristi kao adresa memorijske lokacije u koju se upisuje. Kod itanja sa steka najpre
se sadraj registra SP koristi kao adresa memorijske lokacije sa koje se ita sadraj, pa se posle
toga vri dekrementiranje sadraja registra SP.
Stek raste prema niim lokacijama a registar SP ukazuje na prvu slobodnu lokaciju
Kod upisa na stek najpre se sadraj registra SP koristi kao adresa memorijske lokacije u
koju se upisuje, pa se posle toga vri dekrementiranje registra SP. Kod itanja sa steka najpre se
vri inkrementiranje sadraja registra SP, pa se posle toga sadraj registra SP koristi kao adresa
memorijske lokacije sa koje se ita sadraj.
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 veliinama kod jezika sa dinamikim dodeljivanjem
prostora kod ulaska u potprogram i oslobaanjem prostora kod naputanja
potprograma.
4.2 Instrukcije procesora
Rad procesora je odreen instrukcijama koje on izvrava, a koje se zovu mainske
instrukcije ili raunarske instrukcije. Skup razliitih instrukcija koje procesor moe da izvri se
zove skup instrukcija procesora. Skup standardnih instrukcija ine instrukcije prenosa,
-
4-5
aritmetike instrukcije, logike instrukcije, instrukcije pomeranja i rotiranja, instrukcije skoka i
meovite 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 Smetanje podatka iz akumulatora na lokaciju a
PUSH a Podatak sa lokacije a se smeta na stek (moe biti i bezadresna, tada se podrazumeva akumulator kao izvor)
POP a Podatak sa steka se smeta na lokaciju a (moe biti i bezadresna, tada se podrazumeva akumulator kao odredite)
Aritmetike instrukcije
ADD a,b,c
ADD a,b
ADD a
ADD
Sabiranje operanada sa lokacija a i b i smetanje na lokaciju c; kod dvoadresne instrukcije jedan od operanada je i
odredite; kod jednoadresne instrukcije jedan izvor i odredite je akumulator; kod bezadresne instrukcije vrh steka je implicitan izvor i odredite
SUB a,b,c
SUB a,b
SUB a
SUB
Oduzimanje
MUL a,b,c
MUL a,b
MUL a
MUL
Mnoenje
DIV a,b,c
DIV a,b
DIV a
DIV
Deljenje
INC a,b
INC a
INC
Inkrementiranje operanda sa lokacije a i smetanje na lokaciju b; kod jednoadresne instrukcije odredite je lokacija a, kao i izvor; kod bezadresne instrukcije vrh steka je
implicitno odredite i izvor
DEC a,b
DEC a
DEC
Dekrementiranje
Logike instrukcije
AND a,b,c
AND a,b
AND a
AND
Operacija logiko I
OR a,b,c
OR a,b
Operacija logiko ILI
-
4-6
OR a
OR
XOR a,b,c
XOR a,b
XOR a
XOR
Operacija logiko XOR
NOT a,b
NOT a
NOT
Operacija komplementiranja
Instrukcije
pomeranja
ASR a,b
ASR a
ASR
Aritmetiko pomeranje udesno; na mesto novog MSB bita se upisuje stari MSB bit
ASL a,b
ASL a
ASL
Aritmetiko pomeranje ulevo; na mesto novog LSB bita se upisuje 0
LSR a,b
LSR a
LSR
Logiko pomeranje udesno; na mesto novog MSB bita se upisuje 0
LSL a,b
LSL a
LSL
Logiko pomeranje ulevo; na mesto novog LSB bita se upisuje 0
ROR a,b
ROR a
ROR
Rotiranje udesno; na mesto novog MSB bita se upisuje stari
LSB bit
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 izvravanje
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
Instrukcije uslovnog skoka u zavisnosti od vrednosti
indikatora u PSW-u; a je pomeraj u odnosu na PC na koji
treba skoiti
-
4-7
BLEQ a
BNEG a
BNNG a
BOVF a
BNVF a
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 skae
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
4.2.1 Elementi mainske instrukcije
Svaka instrukcija mora da sadri informacije koje procesor zahteva za izvrenje. Elementi
mainske instrukcije su:
- Kod operacije, koji odreuje operaciju koja treba da se izvede. On predstavlja binarni kod
koji jedinstveno odreuje svaku operaciju.
- Referenca izvornog operanda, koja obuhvata jedan ili vie izvrnih operanada koji se
koriste kao ulazi za izvrenje instrukcija.
- Referenca rezultujueg operanda, koja obuhvata rezultujui operand, tj. rezultat izvrenja
instrukcije.
- Referenca na sledeu instrukciju, koja govori procesoru gde se nalazi sledea instrukcija
koju treba izvriti posle zavretka tekue instrukcije.
Sledea instrukcija koja treba da se izvri se nalazi u glavnoj memoriji ili na disku (kod
sistema sa virtuelnom memorijom). U veini sluajeva, sledea instrukcija koja treba da se izvri
-
4-8
se nalazi neposredno iza tekue 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 sledee tri oblasti:
1. Glavna ili virtuelna memorija,
2. Registri procesora,
3. U/I ureaji (u sluaju memorijski preslikanog ulaza/izlaza predstavlja adresu u glavnoj
memoriji koja je rezervisana za dati ureaj).
4.2.2 Predstavljanje instrukcija
Unutar raunara, svaka instrukcija je predstavljena nizom bitova. Podeljena je na polja koja
odgovaraju elementima instrukcije koji su njen sastavni deo. Jednostavan primer formata
instrukcije je prikazan na slici 3. Za vreme izvrenja instrukcije, ona se uitava u registar za
instrukcije IR, koji se nalazi u procesoru.
Slika 3. Primer formata instrukcije
Binarno predstavljene mainske instrukcije su teko razumljive za oveka. Stoga je
uobiajena praksa da se koristi simboliko predstavljanje mainskih instrukcija. Operacioni
kodovi se predstavljaju skraenicama koje se zovu mnemonici i ukazuju na odreenu operaciju.
Neki od primera su ADD, SUB, LOAD, POP,, a primer kompletne instrukcije je:
-
4-9
ADD x,y,z
Jezik u kome se koriste simboliko predstavljene mainske instrukcije se zove asembler.
4.2.3 Vrste instrukcija
Instrukcije se mogu klasifikovati po operacijama koje izvravaju i po broju adresnih polja
koje koriste za svoje izvravanje. Stoga razlikujemo operacije koje se koriste za:
- Obradu podataka (aritmetike i logike instrukcije),
- Skladitenje podataka (memorijske instrukcije),
- Pomeranje podataka (U/I instrukcije),
- Upravljanje (testiranje i grananje).
Po broju adresa razlikujemo sledee 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 uporeene tipine jednoadresne, dvoadresne i troadresne instrukcije, koje bi
mogle da se upotrebe da bi se izraunala vrednost izraza Y = (A B) / [C + (D * E)]. Sa tri
adrese, svaka instrukcija odreuje dve lokacije izvornih operanada i odredinu lokaciju
operanada. Privremena lokacija T se koristi da se skladite meurezultati, kako ne bismo menjali
sadraj nijedne od lokacija.
Slika 4. Programi za izraunavanje izraza Y = (A B) / [C + (D * E)]
-
4-10
Troadresni formati instrukcija nisu uobiajeni zato to zahtevaju relativno dugaak 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 raunanje Y B i skladiti rezultat u Y. Dvoadresni format
smanjuje koliinu memorije potrebne za smetanje 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 obino registar u procesoru koji se naziva akumulator (Acc).
Akumulator sadri jedan od operanada i koristi se za skladitenje rezultata. U ovom primeru,
potrebno je osam instrukcija da bi se izvrio zadatak.
Bezadresne instrukcije se mogu koristiti kod raunara 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 smeta na
stek instrukcijom PUSH, a uzima sa steka instrukcijom POP.
4.2.4 Vrste operanada
Operandi predstavljaju podatke koji se mogu podeliti u etiri kategorije:
1. Adrese (operand moe predstavljati adresu u operativnoj memoriji ili adresu
registra),
2. Brojevi,
3. Znakovi,
4. Logiki podaci.
Brojevi u raunaru mogu biti predstavljeni u vidu tri tipa numerikih 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 pomou binarnih kodova, od kojih je najzastupljeniji 7-bitni
ASCII kod.
-
4-11
Logiki podaci u raunaru se predstavljaju pomou jednog bita koji ima vrednost 0 za
netanu vrednost izraza (false) i 1 za tanu vrednost izraza (true).
Zadatak 1. Na steku se nalaze simboli A, B, C i D, tako da je A na vrhu steka. Izraunati
vrednost izraza (A3 + B + C) * D i smestiti ga na stek. Koristiti jednu pomonu lokaciju b i
naredbe LOAD, STORE, POP, PUSH koje koriste akumulator, kao i jednoadresne aritmetike
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
-
4-12
Zadatak 2. Napisati program za izraunavanje 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
sadraj ovih elija. Na raspolaganju je i lokacija e na koju se smeta rezultat. Program napisati za
raunar koji koristi jednoadresne naredbe.
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