Anda di halaman 1dari 800

Arhitektura procesora FRISC

Sastavni dijelovi svakog raunala


Najvaniji dio raunala je procesor
Procesor je aktivni dio raunala koji upravlja radom raunala i
obavlja razliite operacije nad podatcima u sustavu
Procesor se sastoji od puta podataka (datapath) i upravljake
jedinice
Procesor se naziva i CPU
Procesor

Upravljaka
jedinica

Put
podataka

Osnovni dijelovi raunala


Put podataka
Dio procesora koji:
obavlja odreene operacije (npr. aritmetike) nad podatcima
privremeno pamti podatke i meurezultate
prenosi podatke izmeu dijelova za pamenje i obradu

Upravljaka jedinica
Dio procesora koji upravlja radom puta podataka, memorije i
ulazno/izlaznih sklopova na temelju naredaba programa koji se
izvodi

10

Osnovni dijelovi raunala


Memorija
Dio raunalnog sustava u kojem se spremaju programi koji se
izvode na procesoru te podatci potrebni za izvoenje tih
programa

Ulaz i Izlaz
Dijelovi raunalnog sustava namijenjeni povezivanju s vanjskim
svijetom
Ulaz: dio namijenjen primanju podataka iz vanjskog svijeta u
raunalo
Izlaz: dio namijenjen slanju podataka iz raunala prema
vanjskom svijetu

11

Osnovni nain rada procesora


Osnovna funkcija procesora je izvoenje programa

Program se nalazi u memoriji i sastoji se od niza naredaba


svaka vrsta naredbi ima posebni oblik koji je razlikuje od drugih
vrsta

Procesor mora dohvaati naredbe iz memorije, a dohvaenu


naredbu mora prepoznati da bi je mogao izvesti
Dakle, rad procesora se odvija u tri osnovna koraka koji se
stalno ponavljaju:
>>>>
dohvat naredbe (fetch)
dekodiranje ili prepoznavanje naredbe (decode)
izvoenje naredbe (execute)

12

Osnovni nain rada procesora


Dohvat naredbe uvijek se sastoji od operacije itanja iz
memorije
moe biti vie operacija itanja, ako se naredba sastoji od vie
memorijskih rijei

Dekodiranje naredbe odvija se interno unutar procesora


Izvoenje se odvija na razliite naine, ovisno o vrsti
naredbe
moe se odvijati interno, ako procesor u sebi ima sve podatke za
izvoenje
moe ukljuivati operacije itanja iz memorije, ako se podatci za
izvoenje naredbe nalaze u memoriji
moe ukljuivati pisanja u memoriju, ako rezultate izvoenja
naredbe treba spremiti u memoriju
6

13

Osnovni nain rada procesora


Procesor

Memorija
1
ADD A,B,X
A

4
+

14

Razine apstrakcije
Koliko detaljno trebamo razmatrati nae raunalo? Do
koje dubine ii?
Pri razmatranju kompleksnih sustava kao to je procesor
vrlo esto se koriste razliite razine apstrakcije

Razine apstrakcije omoguuju pojedinim sudionicima u


procesu projektiranja ili koritenja da se mogu
koncentrirati na njihov dio zadatka bez potrebe da brinu
o detaljima koji im nisu potrebni

15

Razine apstrakcije
Primjeri nekih razina apstrakcije kod procesora su:
Sistemska razina
Visoka razina apstrakcije koju koriste programeri aplikacija koji
ne moraju znati mnogo o nainu kako procesor izvodi program
ve se koncentriraju na funkcionalnost algoritma i cjelokupne
programske podrke.

Arhitektura skupa naredaba (Instruction set architecture level)


Najee spominjana razina apstrakcije izmeu razine programa
i sklopovlja.
Ukljuuje sve podatke o procesoru (registri, pristup memoriji,
naredbe, pristup vanjskim sklopovima i ostalo) koji su potrebni
da bi se napisali programi u strojnom jeziku koji e se ispravno
izvoditi.
Sa strane sklopovlja ova razina opisuje funkcionalnost koju
sklopovlje treba omoguiti.
9

16

Razine apstrakcije
Mikroarhitektura
Detaljan sklopovski opis arhitekture procesora. Opisuje naine
povezivanja pojedinih dijelova procesora te signale potrebne za
njihovo upravljanje.

Razina logikih vrata (gate level)


Potpun sklopovski opis procesora koji, izmeu ostalog, esto
ukljuuje i podatke o svim vremenskim kanjenjima signala
unutar sklopa.

Razina rasporeda (layout level)


Fiziki opis svih sklopova procesora koji koristi definiranu
tehnologiju izvedbe. Prikazuje sve detalje potrebne za
preslikavanje ove razine u fiziko sklopovlje u postupku
proizvodnje.
10

17

Razine apstrakcije
Razine apstrakcije koje emo koristiti na ovom predmetu
su:
Arhitektura skupa naredaba (Instruction set architecture ISA)

Mikroarhitektura

11

18

Arhitektura raunala s obzirom na memorijski


pristup
Izvoenje zadatka na procesoru zahtijeva itanje naredaba
koje je zadao programer te itanje i pisanje podataka koji se
obrauju (kao to smo vidjeli u jednostavnom primjeru ranije)
Naredbe i podatci nalaze se u memoriji
Da bi se obavila jednostavna operacija zbrajanja, kao u
naem prethodnom primjeru, procesor mora vie puta
pristupiti memoriji:

dohvat naredbe ADD iz memorije


dohvat prvog operanda A
dohvat drugog operanda B
spremanje rezultata X

12

19

Arhitektura raunala s obzirom na memorijski


pristup

Pri definiranju naeg procesora stoje nam na


raspolaganju dvije arhitekture s obzirom na
nain dovoenja naredaba i podataka iz
memorije u procesor:

von Neumannova arhitektura


Harvardska arhitektura

>>>>

13

20

Von Neumannova arhitektura


Procesor
Memorija

Znaajka von Neumannove arhitekture je u tome da su program i


podatci smjeteni u jedinstvenu memoriju koja ima samo jednu
vezu prema procesoru
Jednostavna (i jeftina) arhitektura
Nedostatak: Procesor ne moe dohvatiti naredbu i podatke u istom
trenutku => "Von Neumannovo usko grlo"
Usko grlo predstavlja znaajno ogranienje za brzinu obrade podataka
kod raunala koja jednostavnim operacijama obrauju puno podataka,
a trebaju biti efikasna
14

21

Harvardska arhitektura
Procesor

Memorija za
programe

Memorija
za podatke

Jednostavno rjeenje von Neumannovog uskog grla je


razdvajanje memorije za pohranu programa od
memorije za podatke
Procesor ima neovisne veze prema tim memorijama
Ova arhitektura dozvoljava istovremeno dohvaanje naredbe i
jednog operanda ime se efikasnost znatno poboljava*
Skuplja od von Neumannove arhitekture te se koristi samo
kad je potrebno poveanje performansi

15

22

Odluka: Arhitektura mem. pristupa


S obzirom da elimo projektirati jednostavan sustav i da
nam performanse sustava nisu u popisu primarnih
zahtjeva, odluujemo se za jednostavniju i jeftiniju
arhitekturu memorijskog pristupa:
Von Neumannova arhitektura

16

23

Memorijski podsustav (osnovno)


Procesor
Memorija

sabirnice

Memorijski podsustav naelno se spaja na procesor pomou


sabirnica
Sabirnice su spojni putovi (vodovi) koji povezuju dijelove
raunala
Adresna sabirnica odreuje mem. lokaciju kojoj se pristupa
Podatkovna sabirnica slui za prijenos podataka izmeu
procesora i memorije
Upravljaka sabirnica upravlja prijenosom podataka
17

24

Memorijski podsustav
Adresna sabirnica

Mem

Podatkovna sabirnica

chip

Upravljaka sabirnica

Adresni dekoder

Organizacija memorijske rijei razlikuje se od procesora


do procesora: jedna adresa moe odgovarati
memorijskoj lokaciji irine 8, 16, 32 ili vie bita.

18

25

Povezivanje memorije i procesora


Na primjer povezivanja MEM-CPU:
Von Neumannova arhitektura: jedna (zajednika) memorija za
naredbe i podatke
Veza prema CPU preko tri sabirnice: adresna, podatkovna i
upravljaka
Adresna sabirnica: slui za izbor memorijske lokacije
Podatkovna sabirnica: prijenos podataka prema/iz memorije
Upravljaka sabirnica:
odreivanje smjera toka podataka, tj. operacije itanja ili
pisanja - RD i WR (read, write)
Odreivanje irine podatka SIZE

Koristei gore navedeno moemo rei da smo definirali


najjednostavniji sustav za pristup memoriji
19

26

Mala digresija: Stog


Struktura podataka koja radi po naelu LIFO (engl. last in first
out): zadnji spremljeni (stavljeni) podatak je prvi koji se ita
(uzima)
Oprez: stog na razini arhitekture raunala razliit je od
stoga na razini vieg programskog jezika (povezana lista
i alokacija memorije) !!!
Ova struktura se moe slikovito zamisliti kao niz tanjura sloenih
jedan na drugi:

STAVI

UZMI

20

27

Stog
S tanjurima je lako: uvijek znamo gdje stavljamo tanjur ili od
kuda uzimamo tanjur

Kako znati u koju memorijsku lokaciju treba stavljati ili iz koje


uzimati podatak?
Svaka lokacija se moe adresirati, a adresa (poloaj) vrha stoga
(ToS=Top of Stack) pamti se u pokazivau stoga (SP=Stack
Pointer)
SP nije nita drugo, nego obini registar u kojem se pamti
adresa vrha stoga

21

28

Stog
Podatci se stavljaju na stog i uzimaju sa stoga pomou posebnih
naredaba:
PUSH (stavi podatak na vrh stoga) i
POP (uzmi podatak s vrha stoga)
Ove naredbe koriste pokaziva stoga (SP) da bi znale odakle
uzimaju (itaju) ili gdje stavljaju (piu) podatak
Kod rada sa stogom uvijek moramo paziti da:
ne pokuamo staviti vie podataka nego to ima mjesta na
stogu (da se stog ne "prepuni")
ne pokuamo uzimati podatke s praznog stoga (jer bi itali
podatke iz dijela memorije koja nije dio stoga)
ukratko: koliko se stavi na stog, toliko se treba uzeti
22

29

Stog
Kako izgleda stog u memoriji raunala?
Odreene memorijske lokacije koriste se kao podruje za stog
Registar SP se obino nalazi u procesoru
>>>>

100
101
102

103

SP

103
23

30

Stog
Kako izgleda stog u memoriji raunala?
Odreene memorijske lokacije koriste se kao podruje za stog
Registar SP se obino nalazi u procesoru

uoite kako se mijenja


SP za vrijeme rada sa
stogom

STAVI
100
101
102

12

102
103

SP

103
24

31

Stog
Kako izgleda stog u memoriji raunala?
Odreene memorijske lokacije koriste se kao podruje za stog
Registar SP se obino nalazi u procesoru

uoite kako se mijenja


SP za vrijeme rada sa
stogom

STAVI
100

Prvo se SP
umanjuje za 1 101
102

12

102
101

SP

103
25

32

Stog
Kako izgleda stog u memoriji raunala?
Odreene memorijske lokacije koriste se kao podruje za stog
Registar SP se obino nalazi u procesoru

uoite kako se mijenja


SP za vrijeme rada sa
stogom

STAVI
100
Zatim se podatak 101
stavlja tamo gdje
pokazuje SP 102
103

34
12

101

SP

26

33

Stog
Kako izgleda stog u memoriji raunala?
Odreene memorijske lokacije koriste se kao podruje za stog
Registar SP se obino nalazi u procesoru

Kod uzimanja se
prvo podatak
uzima s mjesta
koje pokazuje SP 100
101
102

UZMI
34
12

101

SP

103
27

34

Stog
Kako izgleda stog u memoriji raunala?
Odreene memorijske lokacije koriste se kao podruje za stog
Registar SP se obino nalazi u procesoru

Kod uzimanja se
prvo podatak
uzima s mjesta
koje pokazuje SP 100
101
102

UZMI
34
12

101

SP

103
28

35

Stog
Kako izgleda stog u memoriji raunala?
Odreene memorijske lokacije koriste se kao podruje za stog
Registar SP se obino nalazi u procesoru

Tek nakon toga


pomie se SP
(poveava se za 1)
100

UZMI

101
102

12

101

SP

103
29

36

Stog
Kako izgleda stog u memoriji raunala?
Odreene memorijske lokacije koriste se kao podruje za stog
Registar SP se obino nalazi u procesoru

Tek nakon toga


pomie se SP
(poveava se za 1)
100

UZMI

101
102

12

101
102

SP

103
30

37

Stog
Kako izgleda stog u memoriji raunala?
Odreene memorijske lokacije koriste se kao podruje za stog
Registar SP se obino nalazi u procesoru

UZMI
100
101
102

12

102
103

SP

103
31

38

Stog
Upravo smo vidjeli da se pokaziva stoga SP mijenja
prilikom operacija sa stogom:
kod stavljanja podatka na stog SP se smanjuje
kod uzimanja podatka sa stoga SP se poveava *
Vidjeli smo i redoslijed koraka prilikom operacija sa
stogom:
stavljanje: umanji SP, zatim stavi podatak
uzimanje: uzmi podatak, zatim uveaj SP **
* mogu je i obrnut smjer "rasta/pada" stoga, ali se on u praksi rijee koristi
** mogua je i drugaija realizacija stoga - vie o tome kasnije
32

39

Stog
Kod stavljanja na stog, treba u naredbi PUSH rei to se
stavlja na stog (npr. neki broj ili sadraj nekog registra)
Kod uzimanja sa stoga, treba u naredbi POP rei gdje se
upisuje proitani podatak (npr. u neki registar)
Vano je jo napomenuti:
Pri uzimanju, tj. itanju podatka, taj se podatak ne
"uzima" doslovno sa stoga, tj. nakon itanja se
podatak ne brie sa stoga.
U stvarnosti, podatak koji je "uzet" ostaje zapisan na
stogu, a samo je registar SP promijenio svoju
vrijednost tako da pokazuje na prethodni podatak!!!
33

40

Arhitekture s obzirom na dohvat


operanada
Stogovne arhitekture
Akumulatorske arhitekture

Arhitekture registar-memorija
Arhitekture registar-registar (tzv. load-store)

34

Kova, Basch, FER, Zagreb

Stogovna arhitektura
Upotrebljava se stog za spremanje podataka koji se obrauju
(da bi se rijeio ranije spomenuti problem dohvata podataka
iz memorije)
Ovaj stog nalazi se u procesoru, kao i pokaziva stoga!!!
Operandi su implicitno na vrhu stoga, gdje se smjeta
i rezultat
U naredbama za obradu podataka ne zadaje se eksplicitno
gdje se nalaze operandi niti gdje se sprema rezultat

Naredba za obradu podataka pristupa samo internom stogu

35

Kova, Basch, FER, Zagreb

Stogovna arhitektura
Primjer: raunanje funkcije x=a+b

Procesor
stog
...
B
A
X

...

TOS
TOS
TOS

push A
push B
add
pop X

;
;
;
;
;

operand A iz memorije se stavlja na vrh stoga


operand B iz memorije se stavlja na vrh stoga
zbrajaju se operandi sa vrha stoga
i rezultat se stavlja na vrh stoga
rezultat se sa vrha stoga sprema u memoriju

ALU

...
B
A
X

...
Memorija
36

Kova, Basch, FER, Zagreb

Stogovna arhitektura
Stogovna arhitektura koristila se kod prvih procesora i
danas se u svom osnovnom obliku vie ne koristi
Dobre strane stogovne arhitekture:
Naredbe su jednostavne i bez puno opcija to ih ini brzima za
izvoenje
Izvedba upravljake jedinice je jednostavna
Prevoditelji su jednostavni

Loe strane stogovne arhitekture:


Meurezultati se teko koriste
Prevoenje nije efikasno (jednostavna naredba vieg jezika se
prevodi u dugaak niz naredaba strojnog jezika)
Veliki broj pristupa memoriji !!!
37

Kova, Basch, FER, Zagreb

Akumulatorska arhitektura
Jedan operand je uvijek u posebnom
registru koji se naziva Akumulator (Acc)

Acc

ALU

Ako postoji, drugi operand se ita iz


memorije
Rezultat se sprema u Acc
Naredba za obradu podataka pristupa
memoriji

B
A
X

...

38

Kova, Basch, FER, Zagreb

Akumulatorska arhitektura
Primjer: raunanje izraza
x=a+b
Acc

ALU

B
A
X

load A ; operand A se iz memorije


; stavlja u Acc

add B

; zbraja se Acc sa operandom


; B iz memorije i rezultat
; se stavlja u Acc

store X ; rezultat se iz Acc


; sprema u memoriju

...

39

Kova, Basch, FER, Zagreb

Akumulatorska arhitektura
Vrlo esta arhitektura prvih procesora, a danas se jo moe
nai kod nekih jednostavnih mikrokontrolera

Dobre strane ove arhitekture:


Jednostavnija za izvedbu od stogovne (Acc umjesto stoga)
Naredbe su jednostavne i bez puno opcija
Jedan operand je u memoriji (ne mora ga se dohvaati dodatnom
naredbom)
Prevoditelji su jednostavni

Loe strane ove arhitekture:


Meurezultati (osim zadnjeg) se ne mogu koristiti ve sve mora biti
pohranjeno u memoriju
Jako velik broj pristupa memoriji !!!
Prevoenje nije efikasno

40

Kova, Basch, FER, Zagreb

Arhitektura registar-memorija
R4
R3
R2
R1

ALU

Jedan operand se nalazi u skupu


registara ope namjene (registri koji se
slobodno koriste i nemaju posebnu
funkciju)
Kao i kod drugih arhitektura, uvijek moe
postojati jedan ili vie registara specifine
namjene, ali se oni ne ubrajaju u
openamjenske registre

Drugi operand se ita iz memorije


Rezultat se sprema u neki od
registara ope namjene

B
A
X

...

Naredba za obradu podataka pristupa


memoriji
41

Kova, Basch, FER, Zagreb

Arhitektura registar-memorija
Primjer: raunanje izraza x=a+b
R4
R3
R2
R1

load R1,A

; operand A se iz memorije
; stavlja u R1

add R3,R1,B

; zbraja se R1 sa operandom B iz
; memorije i rezultat se stavlja
; u R3

store R3,X

; rezultat se iz R3 sprema u
; memoriju

ALU

B
A
X

...

42

Kova, Basch, FER, Zagreb

10

Arhitektura registar-registar (load-store)


Oba operanda su u registrima ope
namjene
R4
R3
R2
R1

ALU

B
A
X

...

Rezultat se sprema u neki od registara


ope namjene

Naredba za obradu podataka pristupa


iskljuivo opim registrima
Podatci se mogu itati iz memorije ili pisati u
nju iskljuivo pomou naredba LOAD i
STORE

43

Kova, Basch, FER, Zagreb

11

Arhitektura registar-registar (load-store)


Primjer: raunanje izraza x=a+b
R4
R3
R2
R1

load R1,A

; operand A se iz memorije
; stavlja u R1

load R2,B

; operand B se iz memorije
; stavlja u R2

add R3,R1,R2

; zbraja se R1 sa R2
; i rezultat se stavlja u R3

store R3,X

; rezultat se iz R3 sprema u
; memoriju

ALU

B
A
X

...

44

Kova, Basch, FER, Zagreb

12

Usporedba prethodnih arhitektura


Na temelju prethodnih objanjenja vidljive su neke prednosti i
nedostaci pojedinih arhitektura:
Stogovna i akumulatorska arhitektura bile su esto koritene u
prvim procesorima dok se danas gotovo ne koriste
Neke ideje revitalizacije stogovne arhitekture postoje kod procesora
koji izvode Java bytecode
npr. SUN picoJavaII: kombinacija dobrih osobina stogovne
arhitekture (cirkularni stog) i registarskih arhitektura (operacije s
podatcima koji su bilo gdje na stogu)

Osim iznimaka, veina dananjih procesora ima registarsku


arhitekturu (reg-mem ili reg-reg) meu kojima su vie zastupljene
reg-reg (load-store) arhitekture

45

Kova, Basch, FER, Zagreb

13

Usporedba prethodnih arhitektura


Karakteristike registarskih arhitektura su:

Bri pristup operandima


Varijable se mogu uvati u registrima ope namjene (to je vie
registara to je manje potrebno komunicirati s memorijom)
Prevoditelji efikasnije prevode programe koritenjem registara
Naredbe vee i sporije
Reg-mem arhitekture
+ Jednostavan pristup podatcima u memoriji
- Dodatan pristup memoriji pri izvoenju naredaba, vrijeme izvoenja
varira
Load-store arhitekture
+ Brzo izvoenje, jednostavan format naredaba, jednostavno
generiranje kda, jednostavnost protone strukture, uniformno
vrijeme izvoenja
- Vei broj naredaba u programu zbog zasebnih uitavanja
podataka iz mem.

46

Kova, Basch, FER, Zagreb

14

Primjeri navedenih arhitektura


Stogovna:
WISC CPU/16, MISC M17, picoJava

Akumulatorska
EDSAC

Registarsko-memorijska
Motorola 68000 i Intel 80x86 (imaju karakeristike reg-mem i
reg-reg)

Registarsko-registarska (load-store)
ARM, MIPS, SPARC
47

Kova, Basch, FER, Zagreb

15

Odluka: Arhitektura smjetaja operanada


Od nabrojenih arhitektura trenutno je najefikasnija i u
svijetu dominantna tzv. LOAD-STORE arhitektura (u
podruju ugradbenih raunala)
Dodatna pogodnost je da se ta arhitektura moe i
najjednostavnije projektirati te sklopovski izvesti

Iz tog razloga za na procesor izabiremo LOAD-STORE


arhitekturu
R4
R3
R2
R1

ALU

48

Kova, Basch, FER, Zagreb

16

Arhitekture s obzirom na skup naredaba


S obzirom na skup naredaba procesora razvijene su dvije
arhitekture:
CISC (Complex Instruction Set Computer)
RISC (Reduced Instruction Set Computer)

>>>>

U dananje vrijeme komercijalni procesori nemaju vie


istu arhitekturu CISC ili RISC:
obino u odreenom procesoru prevladava jedna
arhitektura, ali...
esto se ukljuuju pojedina svojstva druge arhitekture

Pogledajmo karakteristike CISC i RISC arhitektura...


49

Kova, Basch, FER, Zagreb

17

CISC
U samom poetku procesori su bili vrlo jednostavni, ali su
tehnoloki vrlo brzo napredovali...
Uskoro je glavni trend u oblikovanju arhitekture procesora bilo
uvoenje procesorskih naredaba bliskih naredbama viih
programskih jezika, npr.:
- umanji registar za 1 i skoi na poetak petlje ako je registar vei
od nule
- pomnoi matrice u memoriji
- pronai odreeni podatak u bloku memorije

Prednosti takvih procesorskih naredaba bile su:

Jednostavnije prevoenje programa iz viih programskih jezika


Uteda memorije zbog manjeg broja naredaba (vano u to
doba!!!)
Ubrzanje rada zbog manjeg broja dohvata naredaba iz memorije

Procesori s takvim skupom naredaba nazivaju se


CISC procesori
50

Kova, Basch, FER, Zagreb

18

CISC
Karakteristike CISC procesora
Velik broj naredaba i njihovih inaica
Velik broj naina adresiranja (vie o tome kasnije)
Veinom su se naredbe unutar procesora izvodile koritenjem
naela mikroprograma, tj. kompleksne naredbe izvodile su se u
nizu ciklusa tijekom kojih je procesor izvodio niz jednostavnijih
operacija (vie o tome emo govoriti kasnije)
Registri imaju posebne namjene (brojai za petlje, za
adresiranje, za podatke itd.)
Problem kompleksnih naredaba rjeava se "unutar procesora"
(moemo rei sklopovski)
Skupo projektiranje i visoka cijena

Primjeri CISC procesora: Intel 80x86, Motorola 68000


51

Kova, Basch, FER, Zagreb

19

RISC
70tih i poetkom 80tih dominaciju na tritu imali su 8-bitni CISC
procesori

Meutim, kompleksne naredbe zahtjevaju kompleksnu logiku za


dekodiranje (sporo dekodiranje i izvoenje) i izuzetno skup i
dugotrajan postupak projektiranja takvih procesora
Poetkom 80-tih, u okviru tri gotovo usporedna istraivaka projekta
(IBM 801, Berkeley RISC i Stanford MIPS) razvijena je potpuno nova
arhitektura procesora zasnovana na jednostavnim instrukcijama
koje se mogu izvoditi velikom brzinom
Procesori s takvim skupom naredaba nazivaju se RISC (Reduced
Instruction Set Computer)

RISC procesor razvijen na sveuilitu Berkeley imao je izuzetne


performanse u usporedbi s komercijalnim CISC-procesorima uz
znatno jednostavniju i jeftiniju sklopovsku izvedbu.

52

Kova, Basch, FER, Zagreb

20

RISC
Primjeri jednostavnih "RISC-naredaba"

uitaj operand iz memorije u registar


zbroji dva podatka iz registra
spremi sadraj registra u memoriju
umanji sadraj registra za 1
skoi na neku naredbu (npr.) poetak petlje ako je zastavica
ZERO=1

Umjesto jedne kompleksne "CISC-naredbe" moe se


napisati niz jednostavnijih "RISC-naredaba"
jednostavnije naredbe se puno bre izvode pa je rezultat
ubrzanje izvoenja programa bez obzira na vei broj naredaba

53

Kova, Basch, FER, Zagreb

21

RISC
Karakteristike RISC procesora
Relativno malen skup jednostavnih naredaba, manji broj inaica
svake naredbe
Mali broj naina adresiranja
Pojedina naredba brzo se izvodi
Velik broj ravnopravnih registara ope namjene unutar
procesora
Problem kompleksnih naredaba rjeava se izvan procesora
(moemo rei programski)
Koritenje protone strukture za ubrzanje rada (vie o tome
kasnije)
Relativno jeftino projektiranje i niska cijena

Primjeri RISC procesora: MIPS, ARM, SPARC


Kova, Basch, FER, Zagreb

54

22

Izbor RISC-CISC
Zbog oitih prednosti na cjelokupnom tritu ugradbenih
ureaja koji u sebi sadre procesor, RISC procesori
danas dominiraju
Mi emo zbog toga, a i zbog jednostavnosti arhitekture
koju emo opisivati u okviru ovih predavanja, takoer
odabrati da na procesor bude tipa RISC
Prema ovoj vrsti arhitekture dat emo i ime
naem procesoru. Procesor emo zvati FRISC to
je kratica od FER RISC

55

Kova, Basch, FER, Zagreb

23

Odluka: Broj registara


S obzirom da smo izabrali load-store arhitekturu moramo
definirati koliko registara elimo u naem procesoru
S obzirom da e se izbor pojedinog registra obavljati
postavljanjem odreenih bitova unutar naredbe onda je
efikasno da broj registara bude potencija broja 2
Veina dananjih procesora ima 8 ili 16 registara ope
namjene

56

Kova, Basch, FER, Zagreb

24

Odluka: Broj registara


Radi jednostavnosti arhitekture i to jednostavnijeg
oblika naredbe izabiremo da na procesor ima 8
registara ope namjene
Nazovimo registre: R0, R1, R2, R3, R4, R5, R6 i R7

57

Kova, Basch, FER, Zagreb

25

Odluka: irina registara (i sab. pod)


irinu registara (u bitovima) odreuje statistika najee koritenih
podataka u programima koje elimo izvoditi na procesoru. Na
primjer:

Byte
Short
Int
Long
Float
Double

8b
16b
32b
64b
32b
64b

Daleko najee koriteni tipovi podataka u opim primjenama su


32-bitni int i float
Na temelju toga moemo izabrati 32b kao optimalnu irinu
registara
S obzirom da smo za registre ope namjene izabrali irinu od 32b,
tada smo implicitno definirali i irinu interne sabirnice podataka kao
i irinu ulaza i izlaza aritmetiko-logike jedinice
58

Kova, Basch, FER, Zagreb

26

Odluka: irina sabirnica


S obzirom da smo izabrali 32b irinu registara ope namjene,
tada je normalno da je i irina sabirnice podataka 32b *
irinu memorijske rijei odabiremo da bude jedan bajt (8b),
ali zbog vee efikasnosti emo moi proitati odjednom 4
bajta (32b) to nam dozvoljava irina podatkovne sabirnice

* Postoje procesori koji imaju razliitu irinu unutarnjih i vanjskih


sabirnica, no u to neemo ulaziti u okviru ovog predmeta (razlog moe
biti npr. elja za to manjim brojem prikljuaka-pinova na procesoru).

59

Kova, Basch, FER, Zagreb

27

Odluka: irina sabirnica


irina adresne sabirnice odreena je maksimalnim
eljenim prostorom memorije
Iako e nai programi biti vrlo kratki, radi jednostavnosti
i uniformnosti arhitekture definirat emo da je i adresna
sabirnica 32b
Svaka adresa odgovara jednoj memorijskoj rijei,
tj. jednom bajtu

60

Kova, Basch, FER, Zagreb

28

Adresni prostor
Logiki adresni prostor

Fiziki adresni prostor

00000000

Memorija

...

FFFFFFFF

61

Kova, Basch, FER, Zagreb

29

Redoslijed zapisa podataka u mem.

little- endian

big-endian

1000

34

1000

12

1001

12

1001

34

62

Kova, Basch, FER, Zagreb

30

Programsko brojilo
Spomenuli smo da procesor dohvaa naredbe iz memorije i
izvodi ih

Naredbe su u memoriji smjetene slijedno jedna iza druge i


tim redoslijedom se dohvaaju i izvode (izuzetak su naredbe
skoka)
Naredba koja je
...
ADD

SUB
LOAD
STORE
...

izvedena prethodno

Naredba koja se
trenutano izvodi
Naredba koju treba
sljedeu izvesti

63

Kova, Basch, FER, Zagreb

31

Programsko brojilo
To znai da procesor u svakom trenutku mora "znati"
adresu naredbe koju treba dohvatiti i izvesti
Kako procesor to "zna"?
Jednostavno: procesor ima jedan registar koji slui samo
toj svrsi: PC (program counter) ili programsko brojilo (iako
se tu zapravo nita ne prebraja)
101

ADD

PC

102

SUB

103

103

LOAD

104

STORE

64

Kova, Basch, FER, Zagreb

32

Programsko brojilo
Na registar PC bit e irok 32 bita, jer smo za adresnu
sabirnicu odabrali istu irinu, a logino je da se registrom
PC moe adresirati cijeli memorijski prostor
Registar PC se automatski uveava (nakon dohvata
svake naredbe) tako da pokazuje na sljedeu naredbu u
memoriji
za tu svrhu, PC ima posebne sklopove za uveavanje

65

Kova, Basch, FER, Zagreb

33

Odluke: Rekapitulacija grae


Osam 32-bitnih registara R0, R1, R2, R3, R4, R5, R6, R7

32-bitno programsko brojilo - registar PC


irine internih sabirnica i ALU su 32 bita

irina podatkovne sabirnice je 32 bita


irina adresne sabirnice je 32 bita
irina memorijske lokacije je 8 bita, ali se moe
odjednom itati/pisati 32-bitni podatak
66

Kova, Basch, FER, Zagreb

34

Odabir skupa naredaba

67

Kova, Basch, FER, Zagreb

35

Strojni kod naredbe


Pomou tog kda procesor razlikuje naredbe
RISC strojni kd uobiajeno je irine rijei

Polje operacijskog koda

Polje operacijskog
koda

Polje prvog
operanda

Polje drugog
operanda

Polje
Polje adrese (1.dio)
prvog
operanda

Polje treeg
operanda

Polje adrese
(2.dio)

68

Kova, Basch, FER, Zagreb

36

irina strojnog koda naredbe - CISC


ADD R0,R1,R2
operacijski kd
{ADD}

1. operand
{R0}

2. operand
{R1}

3. operand
{R2}

...

Proirenje
op.koda
{JP}

JP_uvjet 200
operacijski kd
{naredba skoka}

Polje uvjeta
{uvjet}
Adresa
{200}

ADD R0, (200),(R2+6)


operacijski kd
{ALU naredba}

1. operand
{R0}

Nain adresiranja
{apsolutno i reg.ind. s
pomakom}

Adresa
{200}
Proirenje op.koda
{ADD}

3. operand
{R2}

Adresni pomak
{6}

69

Kova, Basch, FER, Zagreb

37

Strojni kd
Treba strogo razlikovati:
naredbu zapisanu tekstom kao npr. "ADD R1,R2,R3"
to je samo nain kako programer pie naredbe u nekom
programu za upis teksta prilikom programiranja
strojni kd naredbe to je zapis naredbe u obliku niza
nula i jedinica u memoriji raunala

70

Kova, Basch, FER, Zagreb

38

Odabir skupa naredaba


Jedna od najvanijih odluka u projektiranju procesora je
odabir skupa naredaba (instruction set)
Postoji vie vrsta naredaba, ovisno o procesoru, na primjer:
Aritmetiko-logike naredbe obavljaju AL operacije
Registarske naredbe premjetaju podatke izmeu registara
Memorijske naredbe itaju i spremaju podatke u/iz memorije
Naredbe za premjetanje podataka mogu premjetati podatak
izmeu registara, memorijskih lokacija i/ili puniti brojeve u
registre i memorijske lokacije
Upravljake naredbe omoguuju programske skokove

>>>>
71

Kova, Basch, FER, Zagreb

39

Odabir skupa naredaba


<<<< (nastavak)
Ulazno-izlazne naredbe slue za rad s ulazno-izlaznim jedinicama
Naredbe za rad s bitovima omoguuju ispitivanje i mijenjanje
pojedinih bitova u podatku
Naredbe za rad s blokovima podataka omoguuju pretraivanje,
itanje i pisanje veeg broja podataka (tj. bloka) koji se nalazi u
memoriji
Specijalne naredbe s posebnom namjenom (npr. odabir naina
prekidnog rada, dozvoljavanje ili zabranjivanje prekida,
programsko izazivanje iznimaka, naredbe za atomarno
ispitivanje i postavljanje memorijskih lokacija, rad s
koprocesorima itd.)
itd. ...
Uglavnom: postoji puno vrsta naredaba

72

Kova, Basch, FER, Zagreb

40

Odabir skupa naredaba


Aritmetiko-logike naredbe

73

Kova, Basch, FER, Zagreb

41

Aritmetiko-logike naredbe
Naredbe koje postoje u svim procesorima su aritmetikologike naredbe pa e ih i na procesor imati
U prethodnim razmatranjima vidjeli smo da ALU moe
izvoditi zbrajanje. To naravno nije dovoljno za izvoenje
bilo kakvog ozbiljnijeg programa pa moramo vidjeti koje
bi nam jo operacije trebale

Tipine operacije koje su esto potrebne su:

zbrajanje - ADD
oduzimanje - SUB
logiki I na bitovima - AND
logiki ILI na bitovima - OR
logiki EKSKLUZIVNI ILI na bitovima - XOR

74

Kova, Basch, FER, Zagreb

42

Aritmetiko-logike naredbe
Za svaku od ovih operacija imat emo jednu naredbu, a
za svaku naredbu moramo zadati operande
Budui da smo odabrali arhitekturu load-store (tj.
registarsko-registarsku arhitekturu), svi operandi i rezultat
nalazit e se u opim registrima

Opi oblik naredaba izgledat e ovako:


naredba operand_1, operand_2, operand_3
"izvedi operaciju izmeu prva dva operanda i stavi
rezultat u trei operand"
Sada moemo napisati prvi program u kojem
izraunavamo aritmetiki izraz...
75

Kova, Basch, FER, Zagreb

43

Aritmetiko-logike naredbe - primjer


S podatcima iz registara izraunati sljedee: R0 := (R1+R2) (R3+R4)

Rjeenje:
ADD
ADD
SUB

R1, R2, R5
R3, R4, R6
R5, R6, R0

; prvi dio izraza


; drugi dio izraza
; razliku spremi u R0

Rjeenje bez promjene registara R5 i R6:


ADD
SUB
SUB

R1, R2, R0
R0, R3, R0
R0, R4, R0

; R1+R2
; R1+R2-R3
; R1+R2-R3-R4

76

Kova, Basch, FER, Zagreb

44

Odabir skupa naredaba


Memorijske naredbe

77

Kova, Basch, FER, Zagreb

45

Memorijske naredbe
AL-naredbe mogu raditi samo s podatcima u registrima
to ako bi u prethodnom primjeru bilo zadano da se
podatci nalaze u memoriji? Kako ih dohvatiti? to ako bi
rezultat trebalo spremiti u memoriju?

S obzirom da je broj registara ogranien, u praksi se


(skoro) svi podatci uvaju u memoriji. Zato trebamo
naredbe pomou kojih bi mogli proitati podatak iz
memorije ili upisati podatak u memoriju
To e obavljati memorijske naredbe, a kako smo izabrali
load-store arhitekturu, onda su to jedine naredbe koje
omoguuju razmjenu podataka izmeu memorije i
registara
78

Kova, Basch, FER, Zagreb

46

Memorijske naredbe
Potrebne su nam dvije glavne operacije:
LOAD - itanje 32-bitnog podatka iz memorije u registar
STORE - pisanje 32-bitnog podatka iz registra u memoriju

Definirajmo operande za svaku naredbu:


LOAD registar, (adresa)
STORE registar, (adresa)
Naredba LOAD "puni registar", tj. ita sadraj etiriju
memorijskih lokacija poevi od zadane adrese i stavlja ih u

registar

Naredba STORE "sprema registar", tj. ita sadraj zadanog


registra i upisuje ga u etiri memorijske lokacije poevi od
zadane adrese

79

Kova, Basch, FER, Zagreb

47

Memorijske naredbe
Adresu zadajemo kao obian broj (pozitivni cijeli broj),
to znai da moramo poznavati poloaj memorijske
lokacije kojoj elimo pristupati
Iako naredbe LOAD i STORE pristupaju etirima
memorijskim lokacijama (jednobajtnim) odjednom,
neemo to posebno naglaavati
Podrazumijeva se da se zadana adresa odnosi na
prvu lokaciju od potrebne etiri

80

Kova, Basch, FER, Zagreb

48

Memorijske naredbe - primjeri


Primjer: izraunavanje izraza iji operandi su u memoriji
Zbrojiti podatke iz memorijskih lokacija s adresama 1000 i 1004, a
rezultat staviti na adresu 1008.
Rjeenje:
LOAD
LOAD

R0, (1000)
R1, (1004)

; dohvati 1. broj iz memorije


; dohvati 2. broj iz memorije

ADD

R0, R1, R2

; zbroji R0+R1 i spremi u R2

STORE R2, (1008)

; spremi rezultat u memoriju

81

Kova, Basch, FER, Zagreb

49

Memorijske naredbe - primjeri


Treba izraunati R0 := (R1+55) - (R2 xor 4ABC).
Pretpostavite da su konstante 55 i 4ABC spremljene u
memoriji.
LOAD R0,
ADD
R1,
LOAD R3,
XOR
R2,
SUB
R0,
BROJ1 DW 55
BROJ2 DW 4ABC

(BROJ1)
R0, R0
(BROJ2)
R3, R3
R3, R0

;
;
;
;
;

uitaj broj 55
prvi dio izraza
uitaj broj 4ABC
drugi dio izraza
razliku spremi u R0

82

Kova, Basch, FER, Zagreb

50

Memorijske naredbe - primjeri


U prethodnom primjeru vidjeli smo kako se odreeni
podatak moe upisati u memoriju:
BROJ1
BROJ2

DW
DW

55
4ABC

Kasnije emo detaljnije objasniti nain pisanja i znaenje


ovih redaka, a sada moemo dati intuitivno objanjenje:
BROJ1 i BROJ2 su labele ili nazivi memorijskih lokacija, koje
moemo pisati umjesto stvarnih adresa tih memorijskih lokacija
Pomou DW (define word) definiramo da se u memoriju upisuje
odreeni broj, u ovom sluaju to su brojevi 55 i 4ABC
Ove dvije memorijske lokacije moemo neformalno promatrati
kao dvije globalne varijable s imenima BROJ1 i BROJ2 kojima
smo dodijelili poetne vrijednosti 55 i 4ABC

83

Kova, Basch, FER, Zagreb

51

Memorijske naredbe - vana napomena


U primjerima smo itali ili pisali podatak s odreene
memorijske lokacije (npr. s adrese 1000)
Na toj lokaciji se mora nalaziti potrebni podatak u sluaju
itanja
Na toj lokaciji se mora nalaziti "slobodno" mjesto u sluaju
pisanja
Na toj lokaciji ne smije se nalaziti neka druga naredba
programa

84

Kova, Basch, FER, Zagreb

52

Odabir skupa naredaba


Upravljake naredbe

85

Kova, Basch, FER, Zagreb

Upravljake naredbe
Za sada imamo:
Aritmetiko-logike naredbe (ADD, SUB, AND, OR, XOR)
Memorijske naredbe (LOAD, STORE)

to moemo napraviti s ovim naredbama?


Ne puno, ali moemo ostvariti jednostavna izraunavanja pri
emu su podatci i rezultati u memoriji ili u registrima. Na
primjer:
Izraunavanje aritmetikih izraza: a+3-4+b+(c-12)+d
Izraunavanje operacija s bitovima:
(a OR 00001111) XOR (b AND 00111100)
Izraunavanje logikih izraza: a AND b XOR true
Sve kombinacije gore navedenih izraza gdje se naredbe
izvode slijedno jedna iza druge
86

Kova, Basch, FER, Zagreb

Upravljake naredbe
Ne moemo ostvariti petlju do-while:

Naredba_1

do

Naredba_1
While ( Uvjet )

Izraunaj Uvjet

Uvjet istinit ?
Ne

Da

kako
ostvariti
uvjetni
skok

?
87

Kova, Basch, FER, Zagreb

Upravljake naredbe
Ne moemo ostvariti uvjetno grananje:
Izraunaj Uvjet

if (Uvjet) then
Naredba_1
else
Naredba_2
endif

Ne

Uvjet istinit ?
Da

kako
ostvariti
bezuvjetni
skok

Naredba_1

Naredba_2

88

Kova, Basch, FER, Zagreb

Upravljake naredbe
Problem je to se AL-naredbe i memorijske naredbe
izvode iskljuivo slijedno, tj. jedna iza druge - onim
redoslijedom kojim su napisane
Zakljuak: nedostaje nam mogunost mijenjanja
redoslijeda normalnog slijednog izvoenja, tj. treba nam
naredba skoka
Naredbe skokova svrstavaju se u upravljake (kontrolne)
naredbe jer one upravljaju tijekom izvoenja programa.

89

Kova, Basch, FER, Zagreb

Upravljake naredbe
Prema prethodnim dijagramima toka, sigurno e nam
trebati dvije vrste naredbe skoka i to:
Naredba bezuvjetnog skoka (promjena redoslijeda
izvoenja)
Naredba uvjetnog skoka (grananje na jednu od dvije
naredbe u ovisnosti o uvjetu)

>>>>
Za obje naredbe, moramo imati operand kojim zadajemo
odredite skoka, tj. adresu naredbe na koju elimo
skoiti

90

Kova, Basch, FER, Zagreb

Upravljake naredbe
Nazovimo naredbu bezuvjetnog skoka JP (od JUMP)

Definirajmo nain pisanja i operand naredbe JP:


JP

adresa

Naredba JP bezuvjetno skae na naredbu sa zadanom adresom


Adresa je zadana obinim brojem kao kod memorijskih naredaba
(vidjet emo kasnije da se adresa takoer odnosi na etiri
memorijske lokacije, to neemo posebno naglaavati)
Uoite da je mogu skok unaprijed ili unazad
Kao i kod memorijskih naredaba, za adresu je umjesto broja
mogue pisati labelu

91

Kova, Basch, FER, Zagreb

Upravljake naredbe
Za uvjetni skok naredba se izvodi na dva mogua naina
Ako je uvjet ispunjen => skok se ostvaruje
Ako uvjet nije ispunjen => skok se ne ostvaruje, tj. izvodi se
sljedea naredba (ona koja je "ispod" naredbe skoka)

Za naredbu uvjetnog skoka upotrijebimo isti naziv JP, ali


emo mu dometnuti sufiks kojim emo oznaiti uvjet.
Definirajmo nain pisanja i operand naredbe JP:
JP_uvjet

adresa

Naredba JP_uvjet skae na naredbu sa zadanom adresom samo


ako je uvjet istinit, a inae nastavlja s izvoenjem sljedee
naredbe

92

Kova, Basch, FER, Zagreb

Upravljake naredbe
Promotrimo li malo bolje, vidimo da je naredba
bezuvjetnog skoka samo specijalni sluaj uvjetnog
skoka pri emu je uvjet uvijek istinit
Zato e postojati samo jedna naredba za skok JP
koju piemo na dva naina:
JP 100
adresi 100
JP_uvjet

// bezuvjetno skoi na naredbu na


100

// skoi na 100 ako je uvjet istinit

Kako se pie uvjet ?

>>>>

93

Kova, Basch, FER, Zagreb

10

Upravljake naredbe - uvjeti


Na primjer, uvjeti mogu biti sljedei:

Jesu li dvije vrijednosti jednake?


Je li prva vrijednost vea od druge?
Je li prva vrijednost manja ili jednaka od druge?
itd. (openito se usporeuju dvije numerike ili logike
vrijednosti)

U uvodnom poglavlju ve smo vidjeli kako se mogu


usporediti dvije vrijednosti:
1. prvo se izvede AL-operacija (najee je to oduzimanje)
2. nakon toga se ispitaju zastavice (Podsjetnik: zastavice su
bistabili koji se postavljaju na temelju ALU-operacije)
94

Kova, Basch, FER, Zagreb

11

Upravljake naredbe - zastavice


C prijenos
V - preljev (od engl. oVerflow, jer je slovo O
previe slino znamenki 0)
Z - nula
N - predznak (od engl. negative)
Ove zastavice se postavljaju pri izvoenju
aritmetiko-logikih naredaba

95

Kova, Basch, FER, Zagreb

12

Zastavice
Prijenos (C)

Preljev (V)

XOR

A3

B3

A
Cout

B
Cin

A2

B2

A
Cout

A1

B
Cin

B1

A
Cout

B
Cin

A0

B0

A
Cout

B
Cin
S

NOR

Predznak (N)
Nula (Z)

96

Kova, Basch, FER, Zagreb

13

Upravljake naredbe - registar SR


Zastavice se nikada ne nalaze u procesoru kao zasebni
bistabili, nego su uvijek unutar registra koji uva i druge
zastavice (npr. prekidne zastavice, zastavice koje
oznauju stanje procesora i sl. - vie o tome kasnije)
Zato emo i mi staviti zastavice u jedan registar koji
emo nazvati registrom stanja SR (engl. status register).
Kasnije emo mu dodati i druge zastavice koje nam budu
trebale:
SR

...

97

Kova, Basch, FER, Zagreb

14

Upravljake naredbe - zastavice


Utjecaj aritmetiko-logikih naredaba na
zastavice:
ADD, SUB:
AND,OR,XOR:

C=prijenos, V=preljev, Z=nula, N=predznak


C=0, V=0, Z=nula, N=predznak

Zastavice Z i N postavljaju se na temelju rezultata ALnaredbe


Zastavice C i V se u logikim naredbama briu jer za
logike operacije prijenos i preljev nemaju smisla

98

Kova, Basch, FER, Zagreb

15

Upravljake naredbe - uvjeti


Napravimo popis svih uvjeta koji bi nam mogli trebati u
naredbi skoka JP:
Uvjeti koji izravno ispituju zastavice
Je li zastavica postavljena (set), tj. je li jednaka jedinici
Je li zastavica obrisana (clear, reset), tj. je li jednaka
nuli
Uvjeti koji slue za usporedbu brojeva
Usporedba NBC-brojeva
Usporedba 2'k brojeva
>>>>

99

Kova, Basch, FER, Zagreb

16

Uvjeti
Prva skupina - izravno ispitivanje zastavica
Zapis
C
NC
V
NV
Z
NZ
N
NN

Znaenje (Ispitivani
uvjet)
C=1
C=0
V=1
V=0
Z=1
Z=0
N=1
N=0

100

Kova, Basch, FER, Zagreb

17

Uvjeti
Druga skupina - usporedbu brojeva (zasebno za NBC i
2'k brojeve)
Zapis
ULE
UGT
ULT
UGE

SLE
SGT

Znaenje (engl.)
Unsigned Less or Equal
Unsigned Greater Than
Unsigned Less Than
Unsigned Greater or
Equal
Signed Less or Equal
Signed Greater Than

SLT
SGE

Signed Less Than


Signed Greater or Equal

>
<

>
<

Ispitivani uvjet
C=0 or Z=1
C=1 and Z=0
C=0
C=1

(N xor V)=1 or Z=1


(N xor V)=0 and
Z=0
(N xor V)=1
(N xor V)=0

101

Kova, Basch, FER, Zagreb

18

Uvjeti
Jo neki praktini uvjeti

Zapis

Znaenje (engl.)

EQ
NE
M
P

Equal
Not Equal
Minus
Plus (Positive)

Ispitivani
uvjet
Z=1
Z=0
N=1
N=0

102

Kova, Basch, FER, Zagreb

19

Upravljake naredbe - primjeri


Primjer uvjetnog grananja - naredba if:
Zbrojiti registre R0 i R1 i rezultat staviti u R2. Ako nema prijenosa,
onda ne treba napraviti nita, a ako ima, onda treba pobrisati R2.
Rjeenje:
ADD R0,R1,R2
JP_NC DALJE

SUB R2,R2,R2
DALJE ...

; AL-operacija
;
;
;
;
;
;

ispitivanje
zastavica
i skok
brii R2
nastavak
programa

Izraunaj Uvjet

Da

C=0 ?
Ne
Pobrii R2

103

Kova, Basch, FER, Zagreb

20

Upravljake naredbe - primjeri


ADD R0,R1,R2
JP_NC DALJE
SUB R2,R2,R2
DALJE ...

Svaki uvjet moe se napisati i na "obrnut" nain. U praksi uvjet


"okreemo" tako da da dobijemo to krai i razumljiviji program

Prethodni program napisan s "obrnutim" uvjetom izgledao bi


ovako:

ADD
JP_C
JP
BRISI SUB
DALJE ...

R0,R1,R2
BRISI
DALJE
R2,R2,R2

104

Kova, Basch, FER, Zagreb

21

Upravljake naredbe - primjeri


Primjer uvjetnog i bezuvjetnog grananja - naredba if-else:
Zbrojiti registre R0 i R1 i rezultat staviti u R2. Ako doe do prijenosa
treba obrisati memorijsku lokaciju REZ, a inae u nju treba upisati R2.
Rjeenje:
ADD R0,R1,R2
JP_C

Izraunaj Uvjet

BRISI

Ima li prijenosa ?
PISI

STORE R2,(REZ) ; upii R2


; u REZ
JP DALJE

Da

Ne
Upii R2 u REZ

BRISI SUB R3,R3,R3


; obrii
STORE R3,(REZ) ; REZ
DALJE ...

Upii 0 u REZ
105

Kova, Basch, FER, Zagreb

22

Upravljake naredbe - primjeri


Primjer petlje u postupku mnoenja:
Treba pomnoiti dva NBC broja (oznaimo to kao A*B) koji su
smjeteni u memoriji na adresama 100 i 200. Rezultat mnoenja
treba spremiti u memoriju na adresu 300.
Rjeenje:

Program emo temeljiti na dijagramu toka. U programu emo


vidjeti veinu onoga to smo do sada nauili:
AL-naredbe,
memorijske naredbe,
rad s konstantama,
naredbu uvjetnog i bezuvjetnog skoka.
Dodatno emo vidjeti i petlju s brojaem.
106

Kova, Basch, FER, Zagreb

23

LOAD
LOAD
OR
LOAD
LOAD
LOAD
PETLJA

KRAJ
...
400
410

R0,
R1,
R0,
R3,
R4,
R5,

SUB
JP_EQ

(100)
(200)
R0, R2
(400)
(400)
(410)

R2, R4, R2
KRAJ

ADD R3, R1, R3


SUB R2, R5, R2
JP
PETLJA
STORE R3, (300)

;
;
;
;
;
;

R0
R1
R2
R3
R4
R5

A
B
Broja := A
Umnoak := 0
0
1

Dohvati A iz memorije
Dohvati B iz memorije
Broja = A
Umnoak = 0

DA

Broja =0 ?
NE
Umnoak = Umnoak + B
Broja = Broja - 1

Spremi Umnoak u memoriju

DW
DW

0
1

107

Kova, Basch, FER, Zagreb

Strojni kd naredaba
Openito

108

Kova, Basch, FER, Zagreb

25

Strojni kd naredaba
Za sada smo definirali 8 naredaba i opisali to te naredbe
rade
Ponovimo:
procesor svaku naredbu mora dohvatiti, dekodirati i izvesti
dekodiranje je, zapravo, raspoznavanje naredbe kako bi se
znalo to tono treba izvesti
svaka naredba je zapisana u memoriji (kao niz nula i jedinica)
i ima svoj posebni oblik po kojem procesor prepoznaje tu
naredbu

Dakle, svaka naredba mora imati jedinstveni zapis,


koji e je razlikovati od svih drugih naredaba
109

Kova, Basch, FER, Zagreb

26

Strojni kd naredaba - FRISC


Za sve naredbe koje smo do sada odabrali moramo definirati
strojne kdove (vodei rauna o buduim proirenjima
procesora)
Pokazat emo kako su zamiljeni strojni kdovi, s time da
razlozi za definiciju pojedinih bitova nee biti jasni odmah,
nego tek kad budemo imali proirenu verziju procesora
Zbog jednostavnosti emo objanjenja ovakvih sluajeva
odgoditi za kasnije i neemo sada definirati strojni kd da
bude efikasan za osam dosadanjih naredaba, jer bi onda
kasnije morali mijenjati tako definirane strojne kdove

110

Kova, Basch, FER, Zagreb

27

Strojni kd naredaba - FRISC


Mi projektiramo ugradbeni procesor koji:

treba biti to jednostavniji


treba imati mali broj naredaba
ima mali broj registara
treba imati mali broj naina adresiranja

Zato, odabiremo da irina strojnog kda bude


procesorska rije, odnosno 32 bita za sve naredbe
Takoer emo se truditi da polja budu rasporeena to
pravilnije kako bi se pojednostavnilo i ubrzalo
dekodiranje naredaba
111

Kova, Basch, FER, Zagreb

28

Strojni kd naredaba
Polje operacijskog kda jednoznano definira o kojoj
se naredbi radi
Za operacijski kd moramo uzeti dovoljno bitova da
moemo razlikovati sve potrebne naredbe (ili grupe
naredaba). Odabiremo da e polje operacijskog kda
(opkod) zauzimati 5 bitova to nam daje ukupno 25 = 32
kombinacija ime moemo izravno razlikovati 32 naredbe
(za sada imamo samo 8 naredaba, ali emo ih kasnije
proirivati).
opkod
31-27

112

Kova, Basch, FER, Zagreb

29

Strojni kd naredaba
Polja operanada jednoznano definiraju s kojim operandima
naredba obavlja svoju zadau
Na primjer, za naredbu ADD:
Koji registar e biti prvi operand zbrajanja
Koji registar e biti drugi operand zbrajanja
U koji registar se sprema rezultat
Za FRISC je definirano da AL naredbe imaju tri operanda i svi su
registri. Kako smo definirali da FRISC ima 8 registara ope namjene
svaki operand kdiramo sa po tri bita.
opkod
31-27

dest

src1

src2

26 25-23 22-20 19-17

16-0

113

Kova, Basch, FER, Zagreb

30

Strojni kd naredaba
Iz ovako definiranog strojnog kda vidimo da imamo
neiskoriteno ukupno 18 bitova

Njih emo kasnije upotrijebiti za daljnja proirenja i


poboljanja AL-naredaba

opkod
31-27

dest

src1

src2

26 25-23 22-20 19-17

16-0

114

Kova, Basch, FER, Zagreb

31

Strojni kd - memorijske naredbe


Memorijske naredbe imaju dva operanda:

prvi operand je registar ije znaenje ovisi o naredbi:


za LOAD znai odredini registar u koji se puni vrijednost (dest)
za STORE znai izvorini registar iz kojeg se ita vrijednost (src)
drugi operand je adresa memorijske lokacije s koje se ita/pie
podatak

Nakon operacijskog kda, kodiramo redom:

jedan bit (26) je neiskoriten


tri bita (23 do 25) za prvi operand, tj. za registar (dest/src)
tri bita (20 do 22) se ne koriste
preostalih 20 bitova (0 do 19) sadre drugi operand, tj. adresu

opkod

dest/
src

31-27

26 25-23

adresa
19-0

115

Kova, Basch, FER, Zagreb

32

Strojni kd - memorijske naredbe


Vidimo da je adresa ograniena na samo 20 bitova, iako
smo definirali da e adresna sabirnica i adresa imati 32
bita
Na ovom primjeru vidimo kako odluka da svaka naredba
ima samo 32 bita ograniava podatke i adrese koje
moramo kodirati u naredbi
Posljedice ovog ogranienja objasnit emo kasnije
opkod

dest/
src

31-27

26 25-23

adresa
19-0

116

Kova, Basch, FER, Zagreb

33

Strojni kd - upravljake naredbe


Upravljake naredbe imaju uvjet i jedan operand:
uvjet se pie kao dio naredbe (sufiks)
operand je adresa skoka (20 bita)

Nakon operacijskog kda, kodiramo redom:

jedan bit (26) je neiskoriten


etiri bita (22 do 25) za uvjet (cond)
dva bita (20 do 21) se ne koriste
preostalih 20 bitova (0 do 19) sadre operand, tj. adresu skoka
opkod

cond

31-27

26 25-22

adresa skoka
19-0

117

Kova, Basch, FER, Zagreb

34

Strojni kd - upravljake naredbe


Usporedimo polje adrese s istim poljem u memorijskim
naredbama:

i ovdje adresa ima samo 20 bitova od potrebnih 32


razlika u znaenju adrese je da ovdje adresa predstavlja
odredite skoka, a ne poloaj podatka za itanje/pisanje
budui da obje naredbe imaju jednako polje za adresu, strojni
kd je pravilniji pa e i dekodiranje i izvoenje naredaba biti
jednostavnije i bre (barem tako oekujemo)
opkod

dest/
src

31-27

26 25-23

opkod

cond

31-27

26 25-22

adresa
19-0
adresa skoka
19-0

118

Kova, Basch, FER, Zagreb

35

Strojni kd - upravljake naredbe


Pogledajmo jo je li za kodiranje uvjeta dovoljno 4 bita
kojima se moe kodirati 16 razliitih uvjeta?
Iz popisa uvjeta imamo sljedee razliite uvjete:

8
8
2
2
1

uvjeta za izravno ispitivanje zastavica


uvjeta za usporedbu brojeva
uvjeta za ispitivanje jednakosti brojeva: EQ, NE
uvjeta za ispitivanje predznaka: M i P
uvjet koji je uvijek istinit (za bezuvjetni JP)

Ukupno imamo 21 razliitih uvjeta to je vie od 16


moguih pa na prvi pogled izgleda da imamo premalo
bitova u polju
>>>>
119

Kova, Basch, FER, Zagreb

36

Strojni kd - upravljake naredbe


<<<<

Ali, ovdje se radi samo o razliitim nainima pisanja


uvjeta
Bitno je koliko postoji razliitih naina ispitivanja
zastavica, tj. koliko postoji razliitih naina izvoenja
naredbe, jer se samo to mora razlikovati u strojnom
kdu
Iz tablica uvjeta vidimo da dio uvjeta ispituje zastavice
na jednak nain i da postoji samo 15 razliitih ispitivanja
zastavica
Dakle: 4 bita su dovoljna
120

Kova, Basch, FER, Zagreb

37

Osnovna inaica procesora


Pregled arhitekture Rekapitulacija

121

Kova, Basch, FER, Zagreb

38

OSNOVNA INAICA PROCESORA


Do sada donesenim odlukama o izboru dijelova
arhitekture i do sada opisanim naredbama, definirali smo
osnovnu inaicu arhitekture naeg jednostavnog
procesora:

Von Neumannova arhitektura


Load-store arhitektura
Osam 32-bitnih registara ope namjene (R0 do R7)
32-bitni registar PC
Registar stanja SR (za sada ima definirana 4 bita)
irina podataka unutar procesora je 32 bita
Adresna i podatkovna sabirnica su irine 32 bita
Memorija s adresiranjem okteta
RISC arhitektura
Poetni skup od osam naredaba
122

Kova, Basch, FER, Zagreb

39

OSNOVNA INAICA PROCESORA


Do sada smo se uglavnom koncentrirali na arhitekturu
skupa naredaba (ISA), a manje na mikroarhitekturu

U daljnjim predavanjima emo definirati poboljanja i


proirenja funkcionalnosti procesora pri emu emo:
posvetiti vie panje mikroarhitekturi

proiriti skup naredaba s novim mogunostima koje


omoguuju lake i efikasnije programiranje

123

Kova, Basch, FER, Zagreb

40

Poboljana inaica procesora


Detaljniji pogled na arhitekturu
skupa naredaba i mikroarhitekturu

124

Kova, Basch, FER, Zagreb

41

Poboljana inaica procesora


Za detaljnije definiranje naredaba moramo vidjeti:

Potrebne/praktine promjene i proirenja u skupu naredaba


Adresiranja
Strojne kdove konanog skupa naredaba
Nain izvoenja naredaba i protonu strukturu

Za detaljnije definiranje mikroarhitekture moramo vidjeti:

Dijelove procesora i nain njihovog spajanja


Put podataka i upravljaku jedinicu
Prikljuke procesora
Spajanje procesora s memorijom i vanjskim jedinicama
Nain komunikacije procesora s memorijom i vanjskim jedinicama

125

Kova, Basch, FER, Zagreb

42

Naelna mikroarhitektura
Pogledajmo kako naelno izgleda
mikroarhitektura naeg procesora:
koje dijelove sadri
kako su ti dijelovi povezani

Slika e za poetak biti samo shematska i


pojednostavljena, a kasnije emo je prikazivati
sve detaljnije
>>>>
126

Kova, Basch, FER, Zagreb

43

Upravljaka jedinica
Control
bus

DR

D[0..31]
IR
REG

SR

ALU

AR

PC

A[0..31]

Na slici vidimo skup registara ope namjene (REG) i ostale registre procesora
kao i nain na koji su naelno spojeni
>>>>

127

Kova, Basch, FER, Zagreb

44

Upravljaka jedinica
Control
bus

DR

D[0..31]
IR
REG

SR

ALU

AR

PC

A[0..31]

Iz registara ope namjene postoje dva spojna puta do ALU za slanje


operanada u AL-naredbama

128

Kova, Basch, FER, Zagreb

45

Upravljaka jedinica
Control
bus

DR

D[0..31]
IR
REG

SR

ALU

AR

PC

A[0..31]

Iz ALU postoji veza do registra stanja SR, kako bi AL-operacija mogla


utjecati na stanje zastavica

129

Kova, Basch, FER, Zagreb

46

Upravljaka jedinica
Control
bus

DR

D[0..31]
IR
REG

SR

ALU

AR

PC

A[0..31]

Postoji spojni put od izlaza ALU do skupa opih registara, kako bi u ALnaredbama rezultat mogao biti zapisan u jedan od opih registara

130

Kova, Basch, FER, Zagreb

47

Upravljaka jedinica
Control
bus

DR

D[0..31]
IR
REG

SR

ALU

AR

PC

A[0..31]

Registar podataka DR (Data Register) slui kao meuspremnik izmeu


unutranjosti procesora i sabirnice podataka, koja je spojena na procesor
preko podatkovnih prikljuaka
131

Kova, Basch, FER, Zagreb

48

Upravljaka jedinica
Control
bus

DR

D[0..31]
IR
REG

SR

ALU

AR

PC

A[0..31]

Podatci koji se itaju i piu preko sabirnice podataka uvijek prolaze kroz
registar DR (uz jednu iznimku)

132

Kova, Basch, FER, Zagreb

49

Upravljaka jedinica
Control
bus

DR

D[0..31]
IR
REG

SR

ALU

AR

PC

A[0..31]

Ta iznimka je dohvaanje naredbe iz memorije. Tada se ona ne sprema u


DR, nego izravno u naredbeni registar IR (Instruction Register)

133

Kova, Basch, FER, Zagreb

50

Upravljaka jedinica
Control
bus

DR

D[0..31]
IR
REG

SR

ALU

AR

PC

A[0..31]

Za vrijeme dekodiranja naredbe njezin strojni kd je spremljen u registru IR i


ita ga upravljaka jedinica (veza od IR do upravljake jedinice nije prikazana
na slici).
134

Kova, Basch, FER, Zagreb

51

Upravljaka jedinica
Control
bus

DR

D[0..31]
IR
REG

SR

ALU

AR

PC

A[0..31]

Adresni registar AR (Address Register) slui kao meuspremnik izmeu


unutranjosti procesora i adresne sabirnice, koja je spojena na procesor
preko adresnih prikljuaka.
135

Kova, Basch, FER, Zagreb

52

Upravljaka jedinica
Control
bus

DR

D[0..31]
IR
REG

SR

ALU

AR

PC

A[0..31]

Registar AR uvijek se koristi kad procesor pristupa memoriji. U AR se sprema


adresa memorijske lokacije koju procesor eli itati ili pisati.

136

Kova, Basch, FER, Zagreb

53

Upravljaka jedinica
Control
bus

DR

D[0..31]
IR
REG

SR

ALU

AR

PC

A[0..31]

Postoji spojni put izmeu registra DR i opih registara jer tim putom prolaze
podatci prilikom izvoenja naredaba LOAD i STORE

137

Kova, Basch, FER, Zagreb

54

Upravljaka jedinica
Control
bus

DR

D[0..31]
IR
REG

SR

ALU

AR

PC

A[0..31]

Registar IR u sebi uva strojni kd u kojem moe biti adresa za naredbu


skoka JP. Ta adresa alje se u PC.

138

Kova, Basch, FER, Zagreb

55

Upravljaka jedinica
Control
bus

DR

D[0..31]
IR
REG

SR

ALU

AR

PC

A[0..31]

Postoji spojni put izmeu registra PC i AR jer se tim putom alje adresa
sljedee naredbe koju elimo dohvatiti iz memorije

139

Kova, Basch, FER, Zagreb

56

Upravljaka jedinica
Control
bus

DR

D[0..31]
IR
REG

SR

ALU

AR

PC

A[0..31]

Registar IR u sebi uva strojni kd u kojem moe biti adresa za naredbe


LOAD/STORE. Ta adresa alje se u adresni registar AR.

140

Kova, Basch, FER, Zagreb

57

Upravljaka jedinica
Control
bus

DR

D[0..31]
IR
REG

SR

ALU

AR

PC

A[0..31]

Veze od upravljake jedinice do ostalih dijelova procesora nisu prikazane jer


ih ima previe - svaki dio upravljan je s jednim ili vie signala koji dolaze iz
upravljake jedinice
141

Kova, Basch, FER, Zagreb

58

Naelna mikroarhitektura
Za sada e nam ovo objanjenje mikroarhitekture biti
dovoljno
Novi vani dijelovi procesora koje smo upravo uveli su:
DR - podatkovni registar koji slui kao meusklop izmeu
unutranjosti procesora i podatkovne sabirnice
AR - adresni registar koji slui kao meusklop izmeu
unutranjosti procesora i adresne sabirnice
IR - naredbeni registar koji uva strojni kd naredbe za
vrijeme njenog dekodiranja

Ovi registri su interni, u smislu da programer nema


izravnog pristupa do njih
142

Kova, Basch, FER, Zagreb

59

Detaljnija arhitektura i
proirenja skupa naredaba

143

Kova, Basch, FER, Zagreb

Proirenja skupa naredaba


Do sada uvedene naredbe omoguuju izvoenje veine
zadaa koje nam mogu zatrebati
Ipak, da bi programiranje bilo lake, uvest emo jo
nekoliko naredaba i naina adresiranja
nain adresiranja = nain na koji se pristupa podatku

Pri tome moramo voditi rauna o strojnim kdovima, jer


oni takoer ograniavaju: broj naredaba, broj naina
adresiranja, vrste operanada, irine podataka, irine
adresa itd.
Pogledajmo neke praktine zadae koje bi mogli lake
rijeiti s drugaijim ili novim naredbama ...

144

Kova, Basch, FER, Zagreb

Proirenja aritmetiko-logikih
naredaba

145

Kova, Basch, FER, Zagreb

Proirenja AL-naredaba
Pretpostavimo da treba registar R0 uveati za 20. Sada je
mogue ovakvo rjeenje:

LOAD R1, (100)


ADD
R0, R1, R0
. . .
100

DW

20

; na adresi 100 nalazi se broj 20

Loe strane ovog rjeenja:


Potrebne su dvije naredbe (brzina i zauzee memorije)
Potrebna je dodatna memorijska lokacija (s brojem 20)
Treba koristiti dodatni registar (npr. R1). Mogue je da on nije
slobodan, pa e ga trebati spremiti i kasnije obnoviti (za to
trebaju jo dvije dodatne naredbe i jo jedna dodatna
memorijska lokacija)

146

Kova, Basch, FER, Zagreb

Proirenja AL-naredaba
Bolje rjeenje bi moglo izgledati ovako:
ADD

R0, 20, R0

Dobre strane ovog rjeenja:


Potrebna je samo jedna naredba
Ne trebaju dodatne memorijske lokacije
Ne treba koristiti dodatne registre

Ali, naredba ADD se komplicira:


Operandi vie nisu samo registri, nego mogu biti i brojevi

Jedno od pravila pri oblikovanju procesora:


Ubrzati rad onoga to se esto koristi
147

Kova, Basch, FER, Zagreb

Proirenja AL-naredaba
Proirimo naredbu ADD tako da kao drugi operand moe
imati:
registar (kao i do sada)
broj (novo)

Moramo vidjeti ima li mjesta za ovakvo proirenje u


strojnom kdu i kako e on sada izgledati
Do sada smo imali ovakav strojni kd:
opkod
31-27

dest

src1

src2

26 25-23 22-20 19-17

16-0

148

Kova, Basch, FER, Zagreb

Proirenja AL-naredaba
Moramo imati razliit strojni kd za razliite vrste
operanada:
Neiskoriteni bit 26 (adr) e oznaavati o kojem se
obliku naredbe radi (to je dodatno 1-bitno polje koje
odreuje nain adresiranja):

opkod

adr

bit 26 u 0 (nuli) oznaava da su oba operanda registri


bit 26 u 1 (jedinici) oznaava da je drugi operand broj

Operandi ovise o bitu adr

31-27

26

25-0

149

Kova, Basch, FER, Zagreb

Proirenja AL-naredaba
Kad su oba operanda registri, strojni kd ostaje kao prije
s razlikom da je bit adr (26) u nuli:
opkod
31-27

0 dest

src1

src2

26 25-23 22-20 19-17

16-0

Kad je drugi operand broj, bit adr (26) je u jedinici, a


zatim redom kodiramo
tri bita (23 do 25) za prvi odredite (dest)
tri bita (20 do 22) za prvi operand (src1)
preostalih 20 bitova (0 do 19) sadre drugi operand, tj. broj
opkod
31-27

1 dest

src1

26 25-23 22-20

20-bitni broj
19-0
150

Kova, Basch, FER, Zagreb

Proirenja AL-naredaba
Teorijski bi mogli imati i oblike:
ADD 20, R1, R2
registar
ADD 20, 30, R4

- prvi operand je broj, a drugi je


- oba operanda su brojevi

Meutim, to ima nedostataka:


Osim bita 26, trebao bi dodatni bit za odabir vrste prvog operanda
Ne dobiva se na fleksibilnosti naredaba
Oblik s dva podatka je besmislen jer troi vrijeme na izraunavanje
konstante vrijednosti, a u strojnom kdu i nema mjesta za dva
broja

Zato, ostajemo na samo dva predloena oblika, ali e oni


vrijediti za sve aritmetiko-logike naredbe (radi
pravilnosti i jednostavnosti arhitekture)
151

Kova, Basch, FER, Zagreb

10

Proirenja AL-naredaba - primjer


Izraunati izraz R0 := (R1+55)-(R2 xor 4ABC).
Usporediti rjeenje bez novih naredaba i rjeenje
koritenjem novouvedenog zadavanja podatka u ALnaredbama.

152

Kova, Basch, FER, Zagreb

11

Bez novih naredaba


LOAD
ADD
LOAD
XOR
SUB

R0,
R1,
R3,
R2,
R0,

(KONST1)
R0, R0
(KONST2)
R3, R3
R3, R0

; Podaci u memoriji
KONST1
DW 55
KONST2
DW 4ABC

153

Kova, Basch, FER, Zagreb

12

S novim naredbama
ADD R1, 55, R0
XOR R2, 4ABC, R3
SUB R0, R3, R0

Prednosti u odnosu na prethodni program su oite:


krai program (3 naredbe prema 5)
nema dodatnih podataka u memoriji (2 podatka)

154

Kova, Basch, FER, Zagreb

13

Proirenja AL-naredaba - proirenje broja


Aritmetiko-logika jedinica je 32-bitna pa, prema tome,
oekuje 32-bitne operande

U okviru strojnog kda za kodiranje broja imamo na


raspolaganju samo 20 bitova
to s gornjih 12 bitova koji nedostaju? Ove bitove treba
nekako definirati.
Procesor e 20-bitni broj (iz strojnog kda) prije slanja u
ALU predznano proiriti na 32 bita

155

Kova, Basch, FER, Zagreb

14

Proirenja AL-naredaba - proirenje broja


DZ: prouiti dokument Proirivanje 20 na 32 bita
Saetak:
Proirenje nulama uva iznos NBC brojeva
(ali ne uva iznos 2'k brojeva)
Predznano proirenje uva iznos 2'k brojeva
(ali ne uva iznos NBC brojeva)
U praksi je u aritmetikim operacijama puno potrebnije imati i
pozitivne i negativne brojeve, nego puni opseg NBC-a.
Zato na procesor koristiti predznano proirenje

156

Kova, Basch, FER, Zagreb

15

Proirenja AL-naredaba - pomaci i rotacije

U asemblerskom programiranju esto treba obaviti


razliite vrste pomaka i rotacija podataka:
1.
2.
3.
4.

logiki pomak ulijevo i udesno


aritmetiki pomak udesno
rotacija ulijevo i udesno
rotacija ulijevo i udesno kroz zastavicu

Mogu se dozvoliti pomaci i rotacije samo za jedan bit ili


za eljeni broj bitova

Teorijski bi mogli odabrati samo dvije operacije


pomaka/rotiranja, a ostale ostvariti programski.

To bi bilo u skladu s idejom "jednostavnog procesora"


157

Kova, Basch, FER, Zagreb

16

Proirenja AL-naredaba - pomaci i rotacije


Meutim, da bi pojednostavnili programiranje i ubrzali
izvoenje, odabrat emo neto vei broj naredaba za
operacije:
1. logikog pomaka ulijevo i udesno
2. aritmetikog pomaka udesno
3. rotacije ulijevo i udesno

Takoer emo definirati da se izlazni bit sprema u


zastavicu C kako bi ga mogli jednostavno ispitati nakon
naredbe

158

Kova, Basch, FER, Zagreb

17

Proirenja AL-naredaba - pomaci i rotacije


Definiramo pisanje i operande naredaba pomaka i rotacije:
SHL
SHR
ASHR
ROTL
ROTR

src1,
src1,
src1,
src1,
src1,

src2,
src2,
src2,
src2,
src2,

dest
dest
dest
dest
dest

logiki pomak u lijevo (SHift Left)


logiki pomak u desno (SHift Right)
aritmetiki pomak u desno(Arithmetic SHR)
rotacija u lijevo (ROTate Left)
rotacija u desno (ROTate Right)

Podatak koji se pomie/rotira uzima se iz prvog operanda (src1)


Broj pomaka/rotacija zadan je drugim operandom (src2)
Rezultat pomaka/rotacije stavlja se u trei operand (dest)
"pomakni podatak iz src1 za src2 bitova i spremi rezultat u dest"

159

Kova, Basch, FER, Zagreb

18

Proirenja AL-nar. za viestruku preciznost

Dvije AL-naredbe koje slue za rad s podatcima u viestrukoj


preciznosti su naredbe zbrajanja i oduzimanja s prijenosom:

ADC (add with carry)


SBC (subtract with carry)

Kasnije emo vidjeti kako se ove naredbe koriste i kako


tono rade

Ove naredbe imaju jednake operande kao i obino zbrajanje


i oduzimanje. Piu se ovako:
ADC src1, src2, dest
SBC src1, src2, dest

160

Kova, Basch, FER, Zagreb

19

Proirenja AL-naredaba - naredba usporedbe

Zadnja AL naredba koju emo uvesti, a koja postoji u veini


procesora je naredba za usporedbu dvaju brojeva CMP (compare)

Ova naredba slina je naredbi za oduzimanje SUB, s razlikom da se


rezultat oduzimanja zanemaruje i ne upisuje u jedan od opih
registara (CMP nema trei operand)

Ovo je ujedno i prednost naredbe CMP, jer su u veini sluajeva


registri zauzeti s razliitim podatcima i meurezultatima

Naredbu CMP zapravo pozivamo zato da postavi zastavice koje


emo nakon toga ispitati naredbom uvjetnog skoka

Naredba se pie ovako (drugi operand je registar ili broj):

CMP src1, src2

; src1-src2

161

Kova, Basch, FER, Zagreb

20

Rekapitulacija: proirenja AL-naredaba

Ovime smo kompletirali skup aritmetiko-logikih


naredaba, kojih sada ima 13:
ADD, SUB, ADC, SBC
CMP
AND, OR, XOR
SHL, SHR, ASHR, ROTL, ROTR

Osim toga, kao drugi operand sada osim registra


smijemo pisati i 20-bitni broj

162

Kova, Basch, FER, Zagreb

21

Proirenja AL-naredaba - zastavice

Veina novih naredaba ima isti utjecaj na postavljanje zastavica kao i ranije
definirane naredbe:

ADD, ADC, SUB, SBC i CMP:


AND, OR i XOR:
SHL, SHR, ASHR, ROTL, ROTR:

C=prijenos,V=preljev,Z=nula, N=predznak
C=0, V=0, Z=nula, N=predznak
C=izlazni bit, V=0, Z=nula, N=predznak

Jedina novost kod postavljanja zastavica je u naredbama pomaka i rotacije gdje


se u zastavicu C upisuje izlazni bit od zadnjeg koraka pomaka/rotacije.

163

Kova, Basch, FER, Zagreb

22

Primjer
U registru R0 nalaze se dvije NBC polurijei. Treba usporediti te
polurijei. Ako je via polurije vea od nie, onda treba skoiti na
adresu 100, a ako nije, onda treba skoiti na adresu 200.
via polurije

nia polurije

R0

Postupak: da bismo mogli obaviti usporedbu, moramo polurijei imati u


zasebnim registrima, npr. R0 i R1.
0

nia polurije

R0

via polurije

R1
>>>>
164
23

Kova, Basch, FER, Zagreb

Proirenja AL-naredaba - primjer


Rjeenje:

ROTR
AND
AND

R0, 10, R1
R0,0FFFF,R0
R1,0FFFF,R1

; via polurije u nii dio R1


; vie bitove R0 stavljamo u 0
; vie bitove R1 stavljamo u 0

CMP

R1, R0

; usporedba

JP_UGT
JP 200

100

; via p.r. > nia p.r. "goto 100"


; via p.r. <= nia p.r. "goto 200"

165

Kova, Basch, FER, Zagreb

24

Proirenja AL-naredaba - put podataka


Na kraju prethodnog poglavlja prikazali smo shematski
mikroarhitekturu FRISC-a, bez ulaenja u detalje
U ovom poglavlju emo postupno uvesti detaljniji prikaz
arhitekture koji se u literaturi obino naziva put
podataka (engl. datapath)
>>>>

166

Kova, Basch, FER, Zagreb

25

Put podataka za AL naredbe


Upravljaka jedinica

C_sel

C_wr

REG
A_sel
A

B_sel

SR_
wr

SR

ALU

OPER_sel

167

Kova, Basch, FER, Zagreb

26

Proirenja AL naredaba

REG

EXT

IR

Proirimo put podataka i


za sluaj kad je drugi
operand 20-bitni broj

SR

ALU

Ovaj broj je zapisan u


niih 20 bitova strojnog
kda

168

Kova, Basch, FER, Zagreb

27

Uvoenje registarskih naredaba

169

Kova, Basch, FER, Zagreb

28

Uvoenje registarskih naredaba


Dosta esta zadaa koju treba obaviti je punjenje broja
(konstante) u registar, na primjer:

pri inicijalizaciji brojaa za petlju


pri incijalizaciji varijable, itd.

Sada to moemo rijeiti pomou naredbe LOAD:


BROJ

LOAD
DW

R1, (BROJ)
32

Loe strane ovog rjeenja su:

Potrebna je memorijska naredba (vidjet emo kasnije da


se memorijske naredbe izvode sporije od npr. ALnaredaba)
Potrebna je dodatna memorijska lokacija (s brojem)
170

Kova, Basch, FER, Zagreb

29

Uvoenje registarskih naredaba


Koji puta (ali ne previe esto) treba vrijednost iz jednog
registra upisati u drugi registar

Sada to moemo rijeiti pomou AL-naredaba, npr.


naredbom OR, AND, ADD, SUB ili ROTL/ROTR. Pokaimo
kako bi upisali vrijednost iz R1 u R2:
OR
AND
ADD
SUB
ROTL

R1,R1,
R1,R1,
R1,0,
R1,0,
R1,0,

R2
R2
R2
R2
R2

Nije estetski, ali uglavnom funkcionira ...

171

Kova, Basch, FER, Zagreb

30

Uvoenje registarskih naredaba


Meutim, AL-naredbe mijenjaju zastavice u registru SR.
To koji puta moe biti nepoeljno.

Ne znamo kako spremiti i obnoviti vrijednost registra SR

172

Kova, Basch, FER, Zagreb

31

Uvoenje registarskih naredaba

Zbog svega navedenog, uvodimo novu naredbu MOVE

Ona po svojim znaajkama ne pripada ni jednoj


postojeoj skupini naredaba (AL, memorijske,
upravljake)

svrstat emo je u zasebnu skupinu registarskih naredaba


(jer ona prvenstveno radi s registrima)

Definiramo pisanje i operande naredbe MOVE:


MOVE

src, dest

src - izvor podatka; moe biti: SR, R0-R7 ili 20-bitni


podatak koji se predznano proiruje na 32 bita
dest - odredite podatka; moe biti: SR ili R0-R7

173

Kova, Basch, FER, Zagreb

32

Uvoenje registarskih naredaba

Registar SR je 5-bitni (to jo ne znamo, ali tako e ispasti ) pa


moramo definirati kako MOVE barata s podatcima razliitih irina
(Ri oznauje opi registar R0-R7):
MOVE podatak, SR nakon predznanog proirenja
podatka na 32 bita, odbacuje se gornjih 24 bita i u SR se puni
samo najniih 5 bita podatka
MOVE Ri, SR u SR se puni najniih 5-bita iz registra Ri

MOVE SR, Ri SR se puni u najnie bitove od Ri, a vii


bitovi se pune nulama

174

Kova, Basch, FER, Zagreb

33

Uvoenje registarskih naredaba - primjer


Primjer uitavanja brojeva u registre:
U registar R0 treba upisati broj 12345, u registar R1 broj FFFF1234, u
R2 broj -100A, u R3 broj 12345678, a u registar R4 broj 9ABCDEF0.
; Prvi nain je izravno koritenje naredbe MOVE.
; Ovo je pogodno za brojeve malog apsolutnog iznosa.
; "Mali brojevi" su oni koji "stanu" u strojni kod.
MOVE 12345, R0

; 12345 stane u 17+1 bit

MOVE 0FFFF1234, R1

; isto kao -EDCC, a


; EDCC stane u 16+1 bit

MOVE -100A, R2

; 100A stane u 13+1 bit

>>>>
175

Kova, Basch, FER, Zagreb

34

Uvoenje registarskih naredaba - primjer


; Drugi nain je pogodan za "velike brojeve" koji ne
; "stanu" u strojni kod. Broj se "puni" u registar u
; vie koraka: Na primjer, kombinacijom MOVE i ADD
MOVE 1234, R3
ROTL R3, %D 16, R3
ADD R3, 5678, R3

; 12345678 stane u 29+1 bit

; Trei nain za "velike brojeve" znamo od prije:


; upotreba naredbe LOAD i dodatne memorijske lokacije

LOAD R4, (BROJ)


BROJ DW
9ABCDEF0

176

Kova, Basch, FER, Zagreb

35

Digresija: 20-bitni brojevi u naredbama

20-bitni broj iz strojnog kda se prilikom izvoenja predznano


proiruje na 32 bita

Dakle, dobiveni 32-bitni broj e sigurno u svih gornjih 13 bitova


imati ili sve nule ili sve jedinice (ovisno o najviem bitu 20-bitnog
broja)

Prilikom pisanja programa mogu se pisati pozitivni i negativni


brojevi: 123, -2, FFFF5678 itd.

Asemblerski prevoditelj svaki ovaj broj prvo pretvori u 32-bitni


zapis:
32-bitni NBC ako je broj pozitivan
32-bitni 2'k zapis ako je broj negativan

Ako su u dobivenom 32-bitnom zapisu gornjih 13 bitova isti, onda


je sve u redu i u strojni kd se upisuje najniih 20 bitova 32-bitnog
zapisa
Ako gornjih 13 bitova nisu isti, onda je to pogreno napisana
naredba (poruka: wrong number)

177

Kova, Basch, FER, Zagreb

36

Uvoenje registarskih nar. - strojni kd


Prouite u knjizi objanjenje naina formiranja strojnog
koda za prethodne naredbe

178

Kova, Basch, FER, Zagreb

37

Registarske naredbe put podataka

REG

EXT

IR

SR

ALU

179

Kova, Basch, FER, Zagreb

38

Proirenje memorijskih
naredaba

180

Kova, Basch, FER, Zagreb

Proirenje memorijskih naredaba


Podsjetimo se da su memorijske naredbe LOAD i STORE
imale zadavanje adrese brojem

U strojnom kdu je za adresu bilo na raspolaganju samo


20 bitova
Budui da smo za adresnu sabirnicu odabrali irinu od 32
bita, moramo tono definirati vrijednost gornjih 12
bitova

181

Kova, Basch, FER, Zagreb

Proirenje memorijskih naredaba


U strojnom kdu ostalih naredaba postoji pravilnost:
AL-naredbe mogu imati u niih 20 bitova zadan 20-bitni
broj koji e biti drugi operand. Ovaj broj se predznano
proiruje prije dovoenja u ALU
Registarske naredbe mogu imati u niih 20 bitova zadan
broj koji se predznano proiruje i stavlja u odredini
registar

Zbog pravilnosti arhitekture definirat emo da se i u


naredbama LOAD i STORE konana 32-bitna
adresa dobiva predznanim proirivanjem 20bitne adrese iz strojnog kda
182

Kova, Basch, FER, Zagreb

Proirenje memorijskih naredaba - adrese

Na ovaj nain ne moemo


adresirati svih 232 lokacija
(tj. 4 GB ili 4096 MB)

...

...

. . . . .

Adresama FFF8 0000 do FFFF FFFF


adresiramo najviih 219 lokacija
memorije (najviih pola MB),to
ukupno daje 220 lokacija (tj. jedan
MB)

0,5 MB koji
se mogu
...
izravno
0007 FFFF adresirati
0000 0000

. . . . .

Adresama 0000 0000 do 0007 FFFF


adresiramo najniih 219 lokacija
memorije (najniih pola MB)

4095 MB
koji se
ne mogu
izravno
adresirati

FFF8 0000 0,5 MB koji


se mogu
...
izravno
FFFF FFFF adresirati

183

Kova, Basch, FER, Zagreb

Proirenje memorijskih naredaba - adrese


Adresni prostor od 1 megabajta je dovoljan za potrebe
ugradbenog raunala, ali ne i za opu upotrebu
procesora
Trebamo zadavanje bilo koje 32-bitne adrese
Mogua rjeenja
Proiriti strojni kd (nekih) naredaba tako da zauzimaju
dvije rijei i u drugu rije staviti 32-bitnu adresu
Upotrijebiti jedan od opih registara za adresiranje

Budui da smo odluili da sve naredbe budu jednake


irine, odabiremo drugo rjeenje
184

Kova, Basch, FER, Zagreb

Proirenje memorijskih naredaba


Sada emo moi naredbe LOAD i STORE pisati na
primjer ovako:
LOAD R0, (R5)
STORE R1, (R4)
STORE R2, (R3)

DZ:
Prouite u knjizi nain formiranja strojnih kodova
memorijskih naredaba

185

Kova, Basch, FER, Zagreb

Primjer rada s adresama veim od 20 bita


Zamijeniti vrijednosti memorijskih lokacija s adresa 200 i 300000:
LOAD R2, (200)

; Dohvati prvi podatak.

LOAD R0, (A)


LOAD R3, (R0)

; Stavi broj 300000 u R0 i s


; njim adresiraj drugi podatak.

STORE R3, (200)


STORE R2, (R0)
; U memoriji na adresi A mora biti upisan
; broj 300000 koji emo koristiti kao adresu:
A
...
200
...
300000

DW 300000 ; Slui kao adresa za drugi podatak


DW 1234

; Prvi podatak.

DW 2468

; Drugi podatak.
186

Kova, Basch, FER, Zagreb

Proirenje memorijskih nar. - odmak


U srojnom kodu naredbe kod dresiranja regsitrom nam
ostaje neiskoritenih 20 najniih bitova

Naredbu moemo uiniti jo fleksibilnijom i praktinijom


za upotrebu ako uvedemo 20-bitni odmak (engl. offset)
Dobivamo konani drugi oblik memorijskih naredaba u
kojem kodiramo adresni registar (adrreg), ali i dodatni
20-bitni odmak

187

Kova, Basch, FER, Zagreb

Proirenje memorijskih naredaba - odmak


Konano, drugi oblik memorijskih naredaba izgleda ovako:
LOAD R1, (R4+20)
STORE R2, (R5-10)
STORE R3, (R6)
odmak=0,ne mora se pisati
Adresa se tijekom izvoenja formira na sljedei nain:
1) 20-bitni odmak se predznano proiri do 32 bita,
2) Vrijednost adresnog registra zbroji se s 32-bitnim
odmakom,
3) Ovaj zbroj je konana 32-bitna adresa za memorijsku
naredbu.

188

Kova, Basch, FER, Zagreb

10

Proirenje memorijskih nar. - irina podatka


Naredbe LOAD i STORE rade s 32-bitnim podatcima koji su u
memoriji zapisani u etiri uzastopne memorijske lokacije
Da bi mogli pristupati pojedinim memorijskim lokacijama, tj.
bajtovima, dodat emo jo i naredbe LOADB i STOREB
(load byte i store byte) koje imaju jednake operande kao i
LOAD i STORE

takoer dodajemo naredbe LOADH i STOREH (load


halfword i store halfword) koje imaju jednake operande kao i
LOAD/STORE te LOADB/STOREB

189

Kova, Basch, FER, Zagreb

11

Proirenje memorijskih nar. - irina podatka

U pristupanju bajtovima, rijeima i polurijeima obino postoje


ogranienja pa ih i mi uvodimo:
Rijei imaju adrese djeljive s 4
Polurijei imaju adrese djeljive s 2
Bajtovi nemaju ogranienja na adresu

U nekim procesorima e u sluaju zadavanja pogrene adrese doi


do tzv. iznimke. Budui da elimo imati jednostavan procesor, mi
emo izbjei ovakvu mogunost na sljedei nain:
FRISC automatski stavlja nule u dva najnia bita adrese prilikom
izvoenja naredbe LOAD/STORE
FRISC automatski stavlja nulu u najnii bit adrese prilikom
izvoenja naredbe LOADH/STOREH
FRISC ne mijenja adresu prilikom izvoenja naredbe
LOADB/STOREB
190

Kova, Basch, FER, Zagreb

12

Primjer
U memoriji se od adrese 1000 nalazi niz 64-bitnih
sloenih podataka kao na slici (npr. C struktura sa shortom, dva char-a i int-om)
1000
1000

1008

1.podatak

2.podatak

short

1001
1002

char

1003

char

1004
1010

3.podatak

1005
1006

int

1007

Treba kopirati 16 i 32-bitni dio iz prvog podatka u nizu u


trei podatak u nizu, a 8-bitne dijelove treba kopirati iz
treeg podatka u prvi.
191

Kova, Basch, FER, Zagreb

13

;registri za adresiranje:
MOVE 1000, R1 ; adresa prvog podatka
MOVE 1010, R3 ; adresa treeg podatka
; kopiraj polurije iz 1. u 3. strukturu
LOADH R5, (R1)
STOREH R5, (R3)
; kopiraj oktete iz 3. u 1. strukturu
LOADB R5, (R3+2)
STOREB R5, (R1+2)
LOADB R5, (R3+3)
STOREB R5, (R1+3)
; kopiraj rije iz 1. u 3. strukturu
LOAD
R5, (R1+4)
STORE R5, (R3+4)

192

Kova, Basch, FER, Zagreb

14

Proirenje memorijskih naredaba - stog


Veina procesora koristi stog za spremanje podataka i
povratnih adresa iz potprograma i prekidnih potprograma
Ve smo vidjeli to je stog i dvije osnovne operacije za
stavljanje i uzimanje podataka sa stoga - PUSH i POP
Da bi omoguili rad sa stogom, uvest emo naredbe PUSH
i POP koje e:
stavljati na stog podatak iz jednog od opih registara (PUSH)
uzimati podatak sa stoga i stavljati ga u jedan od opih
registara (POP)

Budui da se stog nalazi u memoriji, PUSH i POP emo


svrstati u skupinu memorijskih naredaba

193

Kova, Basch, FER, Zagreb

15

Proirenje memorijskih naredaba - stog


Podsjetnik: stog se nalazi u memoriji, a u svakom trenutku
moramo znati adresu vrha stoga
Trebamo pokaziva stoga SP u kojem e se pamtiti adresa vrha
stoga

Mogli bi uvesti posebni 32-bitni registar za tu namjenu


Tada bi morali imati i posebne naredbe koje bi mogle upisivati
vrijednost u SP i itati vrijednost registra SP
Time bi donekle zakomplicirali arhitekturu i proirili skup
naredaba

Zato emo "rtvovati" jedan od opih registara i dodijeliti mu


posebnu ulogu pokazivaa stoga - to e biti R7:
R7 e se moi nazivati alternativnim imenom SP
Inae se R7 moe ravnopravno koristiti u ostalim naredbama
kao i preostali registri R0 do R6
194

Kova, Basch, FER, Zagreb

16

Proirenje memorijskih naredaba - stog


SP pokazuje na zadnji podatak na stogu
Definiramo pisanje i operande naredaba PUSH i POP:

PUSH src
POP dest
src - opi registar iz kojeg se uzima podatak koji se stavlja na
stog
dest - opi registar u kojeg se stavlja podatak sa stoga

PUSH src:

POP dest:

R7-4 R7
src (R7)

(R7) dest
R7+4 R7

195

Kova, Basch, FER, Zagreb

17

Proirenje memorijskih naredaba - stog


Uoite da se R7 smanjuje i poveava za etiri, jer se na
stog uvijek stavlja i uzima 32-bitni podatak

Slino naredbama LOAD i STORE, da bi se izbjegla


greka u naredbama PUSH i POP, automatski se
stavljaju nule na najnia dva bita adrese
Prouite u knjizi strojne kodove za prethodne naredbe

196

Kova, Basch, FER, Zagreb

18

Put podataka
DR

D[0..31]

SHUFFLER

REG

EXT

IR

ALU

AR

SR

A[0..31]

197

Kova, Basch, FER, Zagreb

19

Proirenje upravljakih
naredaba

198

Kova, Basch, FER, Zagreb

20

Proirenje upravljakih naredaba


Za sada imamo samo naredbu skoka JP u kojoj adresu
skoka zadajemo 20-bitnim brojem
Budui da adresa mora biti 32-bitna, ponovno moramo
definirati to e biti u viih 12 bitova
Zbog pravilnosti i jednostavnosti arhitekture, i ovdje e
se 20-bitna adresa iz strojnog kda predznano proiriti
da bi se dobila konana 32-bitna adresa
ovo postavlja ista ogranienja kao i u naredbama LOAD i
STORE
izravno se moe adresirati samo najniih i najviih 0,5
megabajta memorije, to znai da se samo na tim
lokacijama moe nalaziti odredite skoka

199

Kova, Basch, FER, Zagreb

21

Proirenje upravljakih naredaba


Da bi se moglo skoiti na bilo koju memorijsku adresu,
upotrijebit emo istu ideju kao kod naredba
LOAD/STORE:
Jedan registar upotrijebit emo kao adresni registar
koji e svojim 32-bitnim sadrajem zadati adresu
skoka na bilo kojoj memorijskoj lokaciji u prostoru od
4 GB

200

Kova, Basch, FER, Zagreb

22

Proirenje upravljakih naredaba - primjeri


Primjer skoka na 32-bitnu adresu:
Treba skoiti na adresu 200000.

LOAD R0, (A_200000)


JP (R0)
...

;;; Priprema adrese u R0


;;; Skok "na R0"

;;; Na adresi A_200000 nalazi se adresa skoka 200000

A_200000

DW

200000

;;; Na adresi 200000 nalazi se


;;; dio programa na koji skaemo...

200000

ADD R2, R3, R4


...

; neka naredba

201

Kova, Basch, FER, Zagreb

23

Proirenje upravljakih nar. - relativni skok


Vidimo da nain skakanja nije najpraktiniji, ali
funkcionira:
moemo s bilo kojeg mjesta u memoriji skoiti na bilo koje
drugo mjesto

Nepraktino je:
za skok trebaju dvije naredbe i jedan slobodni registar
za skok treba dodatna memorijska lokacija u kojoj je
adresa skoka (praktino je da je ova lokacija bude negdje
unutar memorije koja se moe adresirati s 20 bitova, jer
inae i nju moramo dohvaati indirektno preko nekog
drugog registra)

Pogledajmo kada je ovakav nain skakanja naroito


nepraktian i koje je mogue rjeenje...
202

Kova, Basch, FER, Zagreb

24

Proirenje upravljakih nar. - relativni skok


Iako koritenjem registra moemo skoiti bilo kuda, postoje
sluajevi kad je to naroito nepraktino:
Pretpostavimo da na procesor
spojimo npr. 256MB memorije

...
JP

2100000

...
...
odredite skoka
...

210000C

Pretpostavimo da na adresi
2100000 (u "sredini memorije")
imamo neki dio programa u kojem
se nalazi npr. petlja sa dvadesetak
naredaba ili npr. naredba skoka
kojom elimo preskoiti 2 naredbe
(kao na slici)
Ovakvi kratki skokovi su najei
u programima

203

Kova, Basch, FER, Zagreb

25

Proirenje upravljakih nar. - relativni skok

...
JP

2100000

...
...
odredite skoka
...

210000C

Budui da ne moemo zadati


adresu sa 20-bitnim brojem, morali
bi koristiti registar i dodatnu
memorijsku lokaciju
Budui da je program prepun
ovakvih kratkih skokova, ovo bi
bilo vrlo nepraktino i neefikasno
.....

204

Kova, Basch, FER, Zagreb

26

Proirenje upravljakih nar. - relativni skok


Dodatna nepraktinost: ne
moemo koristiti labelu za skok
(labele poveavaju itljivost)

...
JP

2100000

...
...
odredite skoka
...

210000C

Takoer treba znati adresu na koju


elimo skoiti (Znamo li je?
Teorijski znamo, ali u praksi NE zato to obino ne vodimo rauna
na kojim adresama se nalaze
naredbe)
Postoji li bolje rjeenje?

205

Kova, Basch, FER, Zagreb

27

Proirenje upravljakih nar. - relativni skok

Bolje rjeenje je relativni


skok

...
relativni skok

2100000

...

PC

...
odredite skoka
...

210000C

Relativni skok je takav skok kod


kojeg znamo poetni poloaj
naredbe skoka i "udaljenost"
odredita skoka
Poetni poloaj zapisan je u
registru PC (koji pokazuje jednu
naredbu dalje od naredbe JP)

206

Kova, Basch, FER, Zagreb

28

Proirenje upravljakih nar. - relativni skok

U naredbi relativnog skoka treba


zadati samo udaljenost odredita
skoka

...
relativni skok

2100000

...

PC

...
odredite skoka

210000C

S obzirom da su skokovi veinom


kratki, onda nam je npr. 20-bitna
udaljenost i vie nego dovoljna

...

207

Kova, Basch, FER, Zagreb

29

Proirenje upravljakih nar. - relativni skok


Uvodimo naredbu JR (jump relative) kojoj se
odredite skoka ne zadaje apsolutnom adresom, nego
odmakom od same naredbe JR

Odmak je 20-bitni i predznano se proiruje ime se


dobivaju skokovi "unaprijed" i "unatrag"
Programer ne mora izraunavati ovaj odmak (udaljenost,
engl. offset), nego se za to brine asemblerski prevoditelj,
a programer pie adresu skoka (obino kao labelu)
Naredba moe koristiti uvjet i pie se ovako:
JR adresa
JR_uvjet adresa
208

Kova, Basch, FER, Zagreb

30

Proirenje upravljakih nar. - relativni skok


Ovako definirana naredba daje mogunost adresiranja 1 MB
memorijskog prostora u okolini trenutane naredbe JR:
Mogu je skok unaprijed za otprilike 0,5 MB i unatrag za takoer 0,5
MB:

-0,5 MB
JR

+0,5 MB

Moe se izravno adresirati


relativnim adresiranjem,
bez obzira na adresu
naredbe JR

209

Kova, Basch, FER, Zagreb

31

Proirenje upravljakih naredaba - primjer


Primjer dugakih i relativnih
skokova:
Glavni program je smjeten na
"niskim adresama", a programski
odsjeak na "visokoj adresi"
300000.

Glavni program
("niske adrese")

Iz glavnog programa treba


skoiti na odsjeak na
adresu 300000. Odsjeak
Programski odsjeak
mora zbrojiti pet 32-bitnih
(na adresi 300000)
podataka (petlja) poevi od
adrese 1000 i staviti rezultat u
R0. Nakon toga, odsjeak skae
na labelu NASTAVI koja se
nalazi u glavnom programu.

0,5 MB

4095 MB

0,5 MB

210

Kova, Basch, FER, Zagreb

32

; Glavni program na niim adresama memorije:


GLAVNI LOAD R1, (A_ODSJECAK) apsolutno adresiranje je nemogue
JP (R1)
jer je adresa 300000 ira od 20
...
bitova, a relativno je nemogue jer
je skok predug
NASTAVI ... ; neke naredbe

A_ODSJECAK
1000

DW 300000 ; adresa za skok na odsjeak


DW 12F,5B54C367,23A9,87DDB000,33578

; Na adresi 300000 nalaze se naredbe odsjeka:


300000

PETLJA

MOVE
MOVE
MOVE

5, R5
0, R0
1000, R1

LOAD
ADD
ADD
SUB
JR_NZ

R2, (R1)
R0, R2, R0
R1, 4, R1
R5, 1, R5
PETLJA

JP NASTAVI
Kova, Basch, FER, Zagreb

; broja za petlju
; suma
; adresa podataka

>>>>

211

33

; Glavni program na niim adresama memorije:


GLAVNI LOAD R1, (A_ODSJECAK)
JP (R1)
...
NASTAVI ... ; neke naredbe

A_ODSJECAK
1000

DW 300000 ; adresa za skok na odsjeak


DW 12F,5B54C367,23A9,87DDB000,33578

; Na adresi 300000 nalaze se naredbe odsjeka:


300000

PETLJA

MOVE
MOVE
MOVE

5, R5
0, R0
1000, R1

LOAD
ADD
ADD
SUB
JR_NZ

R2, (R1)
R0, R2, R0
R1, 4, R1
R5, 1, R5
PETLJA

JP NASTAVI
Kova, Basch, FER, Zagreb

; broja za petlju
; suma
; adresa podataka

>>>>

praktino je koristiti relativno


adresiranje i naredbu JR, jer je
skok kratak, a odredite skoka
ima adresu iru od 20 bita

212

34

; Glavni program na niim adresama memorije:


GLAVNI LOAD R1, (A_ODSJECAK)
JP (R1)
...
NASTAVI ... ; neke naredbe

A_ODSJECAK
1000

DW 300000 ; adresa za skok na odsjeak


DW 12F,5B54C367,23A9,87DDB000,33578

; Na adresi 300000 nalaze se naredbe odsjeka:


300000

MOVE
MOVE
MOVE

5, R5
0, R0
1000, R1

PETLJA

LOAD
ADD
ADD
SUB
JR_NZ

R2, (R1)
R0, R2, R0
R1, 4, R1
R5, 1, R5
PETLJA

JP NASTAVI
Kova, Basch, FER, Zagreb

; broja za petlju
; suma
; adresa podataka
JR se ne moe koristiti zbog
prevelike udaljenosti odredita skoka,
a apsolutna adresa se moe koristiti
jer je odredina adresa malena
213

35

Proirenje upravljakih nar. - potprogrami


S obinim skokovima i ostalim naredbama moemo
isprogramirati svaki algoritam

Meutim, da bi mogli programirati, u praksi nam treba


mogunost koritenja potprograma (bolja struktura i
modularnost programa)
Za potprograme nam trebaju posebne naredbe skoka:
naredba za poziv potprograma CALL
naredba za povratak iz potprograma RET

Zbog pravilnosti i ove naredbe izvode se uvjetno


214

Kova, Basch, FER, Zagreb

36

Proirenje upravljakih nar. - potprogrami


Naredba CALL se uvijek pie s adresom potprograma koji
pozivamo (kao to se i naredba skoka JP pie s adresom na
koju treba skoiti). Ova adresa se u praksi obino pie kao
labela, koja se koristi kao ime potprograma. Definiramo
pisanje naredbe CALL:
CALL adr
CALL (adrreg)
CALL_uvjet adr
CALL_uvjet (adrreg)
adr - 20-bitna adresa skoka koja se predznano proiruje
adrreg - opi registar u kojem je adresa skoka

Koriste se isti naini zadavanja adrese skoka kao u naredbi


JP
215

Kova, Basch, FER, Zagreb

37

Proirenje upravljakih nar. - potprogrami


Naredba CALL mora omoguiti povratak na naredbu koja se
nalazi neposredno iza nje, tj. mora spremiti povratnu adresu
Kako naredba CALL "zna" adresu sljedee naredbe?
Jednostavno: adresa se nalazi u registru PC
Podsjetnik: u PC-u se nalazi adresa sljedee naredbe koju treba
izvesti, a to je upravo naredba koja se nalazi neposredno iza
naredbe CALL
Nakon spremanja povratne adrese, CALL moe skoiti u potprogram
tako da u PC stavi adresu potprograma (adresa je zapisana unutar
strojnog kda ili unutar jednog od opih registara)
>>>>
216

Kova, Basch, FER, Zagreb

38

Proirenje upravljakih nar. - potprogrami


<<<<
Gdje se sprema povratna adresa? Na stog*

Dakle, naredba "CALL ADRESA" radi sljedee:


spremi PC na stog
skoi na adresu potprograma (tj. na ADRESA)

Ovako to radi "interno":


SP - 4 SP
PC stog
PC (SP)
ADRESA PC
* To nije jedina mogunost spremanja povratne adrese,
ali je najee koritena

217

Kova, Basch, FER, Zagreb

39

Proirenje upravljakih nar. - potprogrami


Naredba za povratak iz potprograma RET pie se
bez operanada (to je jedina naredba skoka u kojoj se ne
zadaje adresa odredita skoka)

Naredbi RET adresa skoka nije potrebna, jer ona


podrazumijeva da se adresa skoka nalazi na vrhu stoga
Naravno, pretpostavka je da je negdje ranije izveden
CALL koji je povratnu adresu stavio na stog, jer naredba
RET ne moe "znati" to je zaista na stogu
Definiramo pisanje naredbe RET:
RET
RET_uvjet
218

Kova, Basch, FER, Zagreb

40

Proirenje upravljakih nar. - potprogrami


<<<<
Dakle, naredba "RET" radi sljedee:
uzme povratnu adresu sa stoga i skoi na nju

Ovako to radi "interno":


(SP) PC
stog PC
SP + 4 SP

219

Kova, Basch, FER, Zagreb

41

Proirenje upravljakih nar. - potprogrami


Zato se povratna adresa sprema na stog?
Zato jer je stog promjenjive veliine, a to omoguava
jednostavno gnijeenje potprograma do potrebne
dubine, kao i rekurzivno pozivanje potprograma
Spremanje na fiksnu memorijsku lokaciju (npr. u
varijablu) ne bi bilo praktino, jer bi ve drugi
ugnijeeni poziv potprograma unitio prvu spremljenu
povratnu adresu
Kod spremanja na stog, novi podatak uvijek se sprema
na novo mjesto, ovisno o trenutanoj popunjenosti stoga

220

Kova, Basch, FER, Zagreb

42

Proirenje upravljakih nar. - potprogrami


Definirajmo jo dvije varijante naredbe RET
One e nam trebati kod prekidnog U-I prijenosa, pa ih
neemo sada objanjavati
Definirat emo samo nain njihovog pisanja:
RETI
RETI_uvjet
RETN
RETN_uvjet

221

Kova, Basch, FER, Zagreb

43

Proirenje upravljakih naredaba


Na kraju, dodajmo jo jednu naredbu koja postoji u mnogim
procesorima

To je naredba za zaustavljanje rada procesora i naziva se


HALT
Budui da ova naredba prekida normalni slijed izvoenja,
svrstat emo je u upravljake (iako nije naredba skoka)
Zbog pravilnosti e se i naredba HALT moi izvoditi uvjetno
HALT_uvjet
HALT

222

Kova, Basch, FER, Zagreb

44

Proirenje upravljakih nar. - put podataka


Za izvoenje upravljakih naredaba, put podataka je
kompliciraniji nego kod ostalih naredaba

223

Kova, Basch, FER, Zagreb

45

Put podataka

DR

D[0..31]

SHUFFLER

SR

IR

EXT

REG

JP adr
JP (reg)
JR
CALL
RET
PC+4

ALU

8
C

AR

PC

A[0..31]

224

Kova, Basch, FER, Zagreb

46

Naini adresiranja

226

Kova, Basch, FER, Zagreb

48

Naini adresiranja
Do sada smo ve spominjali naine adresiranja i vidjeli ih
u pojedinim naredbama. Pogledajmo sada i definirajmo
naine adresiranja procesora FRISC.
Pod nainima adresiranja (addressing modes) u irem
smislu misli se na naine zadavanja operanada, rezultata
ili odredita skoka u naredbama

U uem smislu, adresiranje se odnosi samo na naine


adresiranja podataka ili odredita skoka u memoriji, ali
ovdje emo koristiti taj pojam u irem smislu
Ovdje se radi o procesorskim nainima adresiranja

227

Kova, Basch, FER, Zagreb

49

Naini adresiranja
Treba razlikovati procesorska adresiranja od
asemblerskih adresiranja
Procesorska adresiranja:
odnose se na razliite naine na koje procesor adresira
podatke prilikom izvoenja naredaba
meusobno se raspoznaju po strojnom kdu naredbe

Asemblerska adresiranja (detaljniji opis kasnije):


razliiti naini pisanja adresa koje dozvoljava asemblerski
prevoditelj
svako od asemblerskih adresiranja e asemblerski prevoditelj
prevesti u jedno od procesorskih adresiranja
razliita asemblerska adresiranja daju isti strojni kd

228

Kova, Basch, FER, Zagreb

50

Naini adresiranja
Iako je na procesor RISC arhitekture, ipak ima relativno
velik broj adresiranja. To su:

Registarsko adresiranje
Neposredno adresiranje
Apsolutno adresiranje
Relativno adresiranje
Registarsko indirektno adresiranje
Registarsko indirektno adresiranje s odmakom
Implicitno adresiranje

229

Kova, Basch, FER, Zagreb

51

Procesorski naini adresiranja

230
52

Kova, Basch, FER, Zagreb

Procesorski naini adresiranja


Registarsko adresiranje (register addressing)
Podatak ili rezultat nalazi se u jednom od registara procesora
ADD R0, 12, R2

Neposredno adresiranje (immediate addressing)


Podatak se zadaje neposredno u naredbi kao broj. Nakon
prevoenja, taj podatak je zapisan u strojnom kdu.
Podatak predstavlja broj s kojim se izvodi operacija, a ne adresu
u memoriji
MOVE 200, R3

231
53

Kova, Basch, FER, Zagreb

Procesorski naini adresiranja


Apsolutno adresiranje (absolute addressing)
broj predstavlja adresu podatka ili skoka u memoriji
LOAD R0, (1200)

Relativno adresiranje (relative addressing)


Koristi se samo u naredbi relativnog skoka JR
JR 1200

Registarsko indirektno adresiranje (register indirect


addressing)
U upravljakim naredbama
U registru se nalazi adresa odredita skoka
CALL (R6)

232
54

Kova, Basch, FER, Zagreb

Procesorski naini adresiranja


Registarsko indirektno adresiranje s odmakom (register
indirect addressing with displacement; base plus offset
addressing)
U memorijskim naredbama
LOAD R5, (R0+4)

Implicitno adresiranje (implied addressing)


iz same naredbe se zna gdje se nalazi podatak ili odredite
skoka i sl.
PUSH R5

233
55

Kova, Basch, FER, Zagreb

Asembleri

234

Asembleri - Uvod
Tipian tijek pri prevoenju viih programskih jezika (UNIX):
Ureiva
teksta
(editor)

C-programi
*.c

Prevoditelj
(compiler)

*.s

Mnemoniki
programi

Apsolutni
strojni kd

*.o
Premjestivi
strojni kd
Punitelj
(loader)

U okviru OS-a
Memorija

Asemblerski
prevoditelj
(assembler)

a.out

Izvrni
program

Poveziva
(linker)

Biblioteke
*.a

235

Asembleri - Uvod
Podjela posla s prethodne slike moe biti i
drugaija:

Povezivanje sa statikim bibliotekama moe obavljati


poveziva, a povezivanje sa dinamikim bibliotekama
moe obavljati punitelj
Punjenje i povezivanje su zadae koje moe obavljati
jedan program.
Mnemoniki program se stvara samo kao privremena
datoteka koja se odmah dalje prevodi asemblerskim
prevoditeljem, a ne kao datoteka koja e ostati
zapisana na disku (ovo je za korisnika nevidljivo)
Izvrni program moe biti u apsolutnom ili
premjestivom obliku

236

Asembleri - Uvod
Za korisnika je veina ovog nevidljiva:
Ureiva
teksta
(editor)

C-programi
*.c

Prevoditelj
(compiler)

Korisnik vidi
samo ovo

Apsolutni
strojni kd

Asemblerski
prevoditelj
(assembler)

*.o
Premjestivi
strojni kd

Punitelj
(loader)

U okviru OS-a
Memorija

*.s

Mnemoniki
programi

a.out

Izvrni
program

Poveziva
(linker)

Biblioteke
*.a

237

Asembleri - Uvod
Tipian tijek pri prevoenju mnemonikih programa:
Ureiva
teksta
(editor)

*.s

Mnemoniki
programi

Apsolutni
strojni kd

*.o
Premjestivi
strojni kd
Punitelj
(loader)

U okviru OS-a
Memorija

Asemblerski
prevoditelj
(assembler)

a.out

Izvrni
program

Poveziva
(linker)

Biblioteke
*.a

238

Asembleri - Uvod
Asemblerski prevoditelji, ili krae asembleri, su
programi koji prevode programe pisane u mnemonikom
jeziku u strojni kd odreenog procesora
postupak prevoenja nazivamo asembliranje

asembleri su prevoditelji, ali znatno jednostavniji od


prevoditelja za vie programske jezike
Mnemoniki jezik je jezik niske razine i prilagoen je
pojedinom procesoru

Svaki strojni kd ima odgovarajui mnemonik s kojim je u


odnosu "jedan na jedan"

239

Asembleri - Uvod
Nakon povezivanja moe se dobiti program koji je jo uvijek
premjestiv ili je u apsolutnom obliku
Program u apsolutnom obliku ima odreene sve adrese podatka
i potprograma i spreman je za izravno punjenje u memoriju
raunala i izvoenje
Za program u premjestivom obliku mora se prilikom punjenja
odrediti poetna adresa i na temelju toga preraunati sve adrese
koje se u programu koriste.

Nakon punjenja u memoriju raunala, program se pokree


Punjenje se tipino odvija pod upravljanjem operacijskog
sustava (OS-a)
Punjenje se ne zadaje izravno, nego se podrazumijeva kad
pokrenemo neki program
Korisnik pokree program pomou ljuske (npr. tcsh/bash na
UNIX-u) ili grafikog suelja (Microsoft Windows, X Window na
240
UNIX-u)

Asembleri - Uvod
Prevoenje mnemonikih programa u ATLAS-u:
Ureiva
teksta
(editor)

Mnemoniki
program

Program xconas

*.a

Asemblerski
prevoditelj
(assembler)

Apsolutni
strojni kd
(izvrni program)

*.e
Program xcompas
Punitelj
simulatora

Memorija
simulatora

241

Asembleri - Uvod
U ATLAS-u se moe koristiti samo jedna datoteka s
mnemonikim programom
Ona se odmah prevodi u izvrnu datoteku u apsolutnom
obliku, tj. sadri strojni kd koji ima zadanu adresu punjenja u
memoriju
ATLAS je simulator raunala na niskoj razini i u njemu ne
postoji operacijski sustav - njegove najosnovnije zadae
preuzima korisniko suelje simulatora u kojem se programi
mogu puniti i izvoditi

242

10

Asembleri - Mnemoniki jezik


U ovom poglavlju nauit emo programirati procesor u
mnemonikom ili asemblerskom jeziku* (assembly
language)
Mnemoniki jezik ovisi o procesoru za kojega je
namijenjen, za razliku od viih programskih jezika koji ne
ovise o raunalu i/ili operacijskom sustavu na kojem e se
izvoditi
Proizvoa procesora propisuje simbolika imena
(mnemonike) za naredbe svog procesora

Dok smo objanjavali arhitekturu i naredbe FRISC-a, ve


smo vidjeli primjere manjih programa i djelomino pravila
pisanja programa u mnemonikom jeziku

243

11

Asembleri - Mnemoniki jezik


Osim propisanih mnemonika, asemblerski prevoditelji dodaju
svoja pravila pisanja, ogranienja ili dopunske mogunosti
Datoteke u mnemonikom jeziku su obine tekstovne
datoteke pisane prema pravilima pojedinog procesora i
asemblerskog prevoditelja*

Ovdje emo koristiti pravila za program CONAS (CONfigurable


ASsembler), koji je asemblerski prevoditelj programskog
sustava ATLAS
* Napomena: i asemblerski jezik i asemblerski prevoditelj
esto se nazivaju skraeno asembler

244

12

Asembleri - Pravila pisanja


Mnemonike datoteke nemaju slobodan
format pisanja kao vii programski jezici,
nego su retkovno orijentirane:
Naredba se ne moe protezati kroz vie redaka
U jednom retku moe biti najvie jedna naredba
Smije se pisati prazan redak (zbog bolje itljivosti)

Svaki redak sastoji se od sljedeih polja:


POLJE_LABELE

POLJE_NAREDBE

POLJE_KOMENTARA

245

13

Asembleri - Pravila pisanja


Polja imaju sljedea znaenja i pravila
pisanja:
Polje labele:
Obavezno poinje od prvog stupca datoteke, ali se smije
ispustiti
Labela je simboliko ime za adresu
Labela se sastoji od niza slova i znamenaka te znaka
podvlake, a prvi znak mora biti slovo
Duljina labele nije ograniena, ali se razlikuje samo prvih
deset znakova
246

14

Asembleri - Pravila pisanja


Polja imaju sljedea znaenja i pravila
pisanja:
Polje naredbe:
Polje naredbe ispred sebe obavezno mora imati prazninu (znak
razmaka ili tabulatora), bez obzira stoji li ispred labela ili ne
Polje naredbe se smije ispustiti (tada naravno nije potrebno
stavljati praznine)
Naredba se pie prema pravilima definiranim za pojedini
procesor
U polju naredbe umjesto naredbe smije stajati i pseudonaredba
(bit e objanjene kasnije)
247

15

Asembleri - Pravila pisanja


Polja imaju sljedea znaenja i pravila
pisanja:
Polje komentara:
Polje komentara poinje znakom komentara i protee se
do kraja tekueg retka
Znak komentara ovisi o procesoru
za FRISC, ARM to je znak toka-zarez ;
Polje komentara se takoer moe ispustiti
Polje komentara se zanemaruje prilikom prevoenja

248

16

Asembleri - Pravila pisanja


Primjeri:
POLJE_LABELE

POLJE_NAREDBE

POLJE_KOMENTARA

PETLJA

ADD R0, R1, R2 ;naredba ADD


SUB R3, R2, R3
PODATCI ORG 200
;pseudonaredba `ORG
LABELA_3 ; labela smije stajati bez naredbe
; komentar smije poeti od prvog stupca
; ovaj bi red bio prazan da nema komentar :)

249

17

Asembleri - Vrste asemblera


Asembleri se mogu podijeliti po broju prolaza
na:

jednoprolazne ili apsolutne asemblere


dvoprolazne ili simbolike asemblere
troprolazne asemblere
tzv. makroasembleri
etveroprolazne asemblere

Ovisno o broju prolaza, asembleri imaju


razliite mogunosti - to vie prolaza, to vie
mogunosti
Objanjenje naina prevoenja prouite
za domau zadau (pogledajte datoteku
nazvanu "03 Nain asembliranja DZ")
250

18

Asembleri - Labele

U asembleru se labele takoer koriste kao odredite skoka

Za razliku od viih programskih jezika, u asembleru je


koritenje labela i naredbe skoka (npr. JUMP) jedini nain
za upravljanje tokom programa
Kao odredite skoka moe se pomou broja zadati i
stvarna adresa skoka, ali tada moramo tono znati na
koju adresu elimo skoiti, tj. moramo tu adresu
"runo izraunati".

NATRAG

ADD...
XOR...
SUB...
JP NATRAG

Labela

ADD...
XOR...
SUB...
JP 4
Stvarna adresa
251

19

Asembleri - Labele
Labele su simboliki nazivi za adrese, a glavne prednosti su:

jednostavnije i bre programiranje


bolja itljivost i lake odravanje programa
izraunavanje adresa obavlja asemblerski
prevoditelj to ujedno smanjuje mogunost
pogreke

Asembler "izraunava" stvarne vrijednosti labela (tj. adrese) tono


onako kako ih i mi "runo izraunavamo"
Koritenje labela naziva se simboliko adresiranje, a koritenje
stvarnih adresa zadanih brojem naziva se apsolutno adresiranje

POZOR: ovo su asemblerska adresiranja i ne treba ih mijeati s


procesorskim adresiranjima, naroito ne s istoimenim
apsolutnim procesorskim adresiranjem o emu e vie biti rijei
kasnije
252

20

Asembleri - Pseudonaredbe
Pseudonaredbe:
nemaju veze s procesorom
to su naredbe za asemblerski prevoditelj: one
upravljaju njegovim radom govorei mu
poblie kako treba obavljati prevoenje
"izvodi" ih asemblerski prevoditelj tijekom
prevoenja

U okviru ARH1 koristiti e se


pseudonaredbe ORG, EQU, DW, DH, DB,
DS, MACRO i ENDMACRO.
253

21

xconas - Pseudonaredba ORG


Pseudonaredba ORG (origin) zadaje asembleru adresu
punjenja strojnog kda i pie se ovako:

ORG

adresa

Adresa mora biti zadana brojem, a ne labelom


podaci e biti smjeteni od zadane adrese
Strojni kdovi dobiveni prevoenjem sljedeih redaka datoteke smjestit
e se u memoriji od zadane adrese (ako je djeljiva s 4) ili prve sljedee
adrese koja je djeljiva s 4

ATLAS-ov asembler daje apsolutni strojni kd pa se mora


znati poetna adresa punjenja programa:
- zadaje se pomou ORG u prvom retku datoteke
- ako se ORG ispusti, onda se pretpostavlja poetna adresa 0

254

22

xconas - Pseudonaredba ORG


Mogue je u datoteci navesti vie pseudonaredba ORG ije
adrese:

moraju biti u rastuem redoslijedu


ne smiju biti manje od adrese zadnjeg prevedenog strojnog kda

program:
ORG 0
ADD ...
STORE ...
ORG 14
LOAD ...
HALT

memorija:
adresa
0:
4:
8:
C:
10:
14:
18:

sadraj
ADD
STORE
0
0
0
LOAD
HALT

zapravo ADD
zauzima adrese 03, STORE 4-7, itd.

"preskoeno"
do adrese 14

brojevi su heksadekadski
255

23

VANO: Poravnanje naredaba za FRISC

Poravnanje naredaba za FRISC


Memorijske lokacije iroke su jedan bajt (tj.
najmanja koliina memorije koja se moe
adresirati je jedan bajt)
Podatkovna sabirnica je irine 32 bita, to znai da
se moe odjednom proitati sadraj 4 memorijske
lokacije
Naredbe su iroke 32 bita pa su u memoriji uvijek
spremljene na adresama djeljivima s 4
Kaemo da su naredbe poravnate na adresu
dijeljivu s 4 (memory aligned).

256

24

VANO: Poravnanje naredaba i ORG


ak ako sa ORG zadamo adresu koja nije djeljiva s 4,
prevoditelj e poravnati naredbe:
program:

ORG 0
ADD ...
STORE ...
...
ORG 25
LOAD ...
HALT

memorija:

adresa
0-3:
4-7:
...
25:
26:
27:
28-2B:
2C-2F:

sadraj
ADD
STORE
...
0
0
0
LOAD
HALT

asemblerski prevoditelj automatski


"poravnava" naredbe na adresu djeljivu s 4
257

25

xconas- Pseudonaredba ORG


Primjer:
program:
ORG 20
ADD ...
STORE ...
LOAD ...
ORG 0
XOR ...
HALT

memorija:
adresa
20:
24:
28:

sadraj
ADD
STORE
LOAD

greka: 0 je manje od adrese


prethodnog ORG-a
(iako bi na adresama 0 i 4 bilo
mjesta za strojni kod
naredaba XOR i HALT)

258

26

xconas - Pseudonaredba ORG


Primjer:
program:
ORG 0
ADD ...
STORE ...
LOAD ...
ORG 4
XOR ...
HALT

memorija:
adresa
0:
4:
8:

sadraj
ADD
STORE
LOAD

greka: 4 je manje od adrese


prethodne naredbe LOAD
(vei je od prethodnog ORG-a,
ali ne "dovoljno")

259

27

xconas - Pseudonaredba EQU


Pseudonaredba EQU (equal) slui za "runo" definiranje
vrijednosti labele (kao da definiramo imenovanu konstantu):

LABELA

EQU

podatak

Labela i podatak se obavezno piu, pri emu podatak mora


biti zadan numeriki, a ne nekom drugom labelom

Inae, kad nema pseudonaredbe EQU, asemblerski prevoditelj


samostalno odreuje vrijednost labele na temelju trenutane
adrese (spremljene u lokacijskom brojilu) i ubacuje labelu u
tablicu labela
Pri nailasku na pseudonaredbu EQU, prevoditelj e zanemariti
vrijednost lokacijskog brojila. Umjesto toga jednostavno e
uzeti labelu i podatak i staviti ih zajedno u tablicu labela

260

28

xconas - Pseudonaredba DW
Pseudonaredba DW (define word) slui za izravan upis rijei
(4 bajta) u memoriju (bez prevoenja):

DW

podatci

Podatci moraju biti zadani numeriki, a ne labelom

Ispred pseudonaredbe DW moe stajati labela


Prevoditelj jednostavno uzima podatke i stavlja ih od sljedee
memorijske rijei na dalje, ime se zauzima i inicijalizira
memorija

261

29

xconas - Pseudonaredba DH
Pseudonaredba DH (define half-word) slui za izravan upis
polurijei (2 bajta) u memoriju (bez prevoenja):

DH

podatci

Podatci moraju biti zadani numeriki, a ne labelom

Ispred pseudonaredbe DH moe stajati labela


Prevoditelj jednostavno uzima podatke i stavlja ih od sljedee
memorijske rijei na dalje, ime se zauzima i inicijalizira
memorija

262

30

xconas - Pseudonaredba DB
Pseudonaredba DB (define byte) slui za izravan upis bajta u
memoriju (bez prevoenja):

DB

podatci

Podatci moraju biti zadani numeriki, a ne labelom

Ispred pseudonaredbe DB moe stajati labela


Prevoditelj jednostavno uzima podatke i stavlja ih od sljedee
memorijske rijei na dalje, ime se zauzima i inicijalizira
memorija

263

31

xconas - Pseudonaredba DS
Pseudonaredba DS (define space) slui za zauzimanje veeg
broja memorijskih lokacija (bajtova) i njihovu inicijalizaciju u
nulu:
LABELA

DS

podatak

Labela se moe ispustiti, a podatak se obavezno pie te mora


biti zadan numeriki, a ne labelom
Podatak zadaje koliko memorijskih lokacija treba zauzeti
Labela e biti adresa prve lokacije u nizu koji je zauzela
pseudonaredba DS

264

32

xconas - Pisanje brojeva


Brojevi se piu u podrazumijevanoj bazi koja je
heksadekadska
To se odnosi na sve brojeve koji se piu u pseudonaredbama i
naredbama bez obzira predstavljaju li adresu, podatak, broj
podataka ili bilo to drugo
za brojeve u drugim bazama, svaki se broj pojedinano moe
napisati u eljenoj bazi ako se napie sa jednim od prefiksa
%B za binarnu bazu, %D za dekadsku i %H za
heksadekadsku.
Kako bi asembler razlikovao brojeve od labela, brojevi e
uvijek poinjati znamenkom a labele slovom: svi
heksadekadski brojevi koji poinju slovom na poetku imaju
dodanu nulu (npr. 0A38C)

265

33

Primjeri programa

266

34

Usporeivanje brojeva
FRISC ima sve potrebne uvjete u upravljakim
naredbama za jednostavno usporeivanje brojeva (u
formatima NBC i 2'k), tako da ne treba "runo"
ispitivati pojedine zastavice
Usporedbe se (najee) obavljaju na sljedei nain:

Prvo se dva broja oduzmu naredbom CMP (ili SUB ako je


potrebna i njihova razlika)
Naredbom uvjetnog skoka usporede se brojevi: ako je
uvjet istinit, onda se skok izvodi, a inae se nastavlja s
izvoenjem sljedee naredbe
U naredbi skoka, uvjet se interpretira kao da je operator
usporedbe stavljen "izmeu" operanada koji su oduzimani

267

35

Usporeivanje brojeva
Na primjer, elimo li usporediti je li broj u R5 vei ili
jednak od broja u R2 (uz pretpostavku da su to NBCbrojevi):
elimo postaviti uvjet R5 R2 pa upotrijebimo sufiks
UGE:
U: unsigned - jer usporeujemo NBC-brojeve
G: greater - jer ispitujemo je li R5 vei od R2
E: equal - jer ispitujemo je li R5 jednak R2

U naredbi CMP piemo brojeve u istom redoslijedu kao


u uvjetu R5 R2:

CMP
JR_UGE

R5, R2
UVJET_ISTINIT
>>>>
268

36

Pisanje uvjeta..
Na primjer: ako je R5 R2, onda treba uveati R7 za 7, a inae ne
treba napraviti nita. Izravnim pisanjem uvjeta dobivamo:

NISTA
UVECAJ_R7
DALJE

CMP
JR_UGE
JR
ADD
...

R5, R2
UVECAJ_R7
DALJE
R7, 7, R7

S obrnutim uvjetom program je neto razumljiviji, krai i bri:

UVECAJ_R7
DALJE

CMP
JR_ULT
ADD
...

R5, R2
DALJE
R7, 7, R7

269

37

Usporeivanje brojeva
Usporediti dva 2'k-broja spremljena u registrima R0 i R1. Manji od
njih treba staviti u R2. Drugim rijeima treba napraviti:

R2 = min ( R0, R1 )
Rjeenje:
CMP
JR_SLT

R0, R1
R0_MANJI

R0_VECI_JEDNAK

MOVE
JR

R1, R2
KRAJ

; R1 je manji

R0_MANJI

MOVE

R0, R2

; R0 je manji

KRAJ

HALT
270

38

Usporeivanje brojeva
Ispitati 2'k-broj u registru R6. Ako je negativan, u R0 treba staviti
broj -1. Ako je jednak nitici, u R0 treba upisati 0. Ako je
pozitivan, treba u R0 upisati 1. Drugim rijeima treba napraviti:
R0 = signum ( R6 )

Rjeenje:

POZ
NEG

OR
JR_Z
JR_N
MOVE
JR
MOVE

KRAJ HALT

R6,R6,R0 ; broj ispitaj i stavi u R0


KRAJ
; ako je 0, u R0 je rezultat
NEG
; ispitaj predznak
1, R0
KRAJ
-1, R0
271

Rad s bitovima
est zadatak u asemblerskom programiranju

Potrebno je mijenjati ili ispitivati bitove u registru ili


memorijskoj lokaciji

Rad s bitovima u registru jednostavno se ostvaruje


kombinacijama aritmetiko-logikih naredaba
Rad s bitovima u memorijskoj lokaciji nije mogu pa se
zato podatak prvo prebaci u jedan od registara, radi se s
bitovima te se podatak vrati u memorijsku lokaciju

Osnovne operacije s bitovima:

postavljanje (set)
brisanje (reset)
komplementiranje (complement)
ispitivanje (test)
272

40

Rad s bitovima
Nekoliko pojmova vezanih za bitove u
podatku:
najvii bajt

vii bitovi

najnii bajt

nii bitovi

Paritet / Parnost
Maska
273

41

Rad s bitovima - Postavljanje bitova


U registru R0 treba postaviti najnia 4 bita, a ostali se ne smiju
promijeniti.

MASKA

LOAD
OR
HALT

R1, (MASKA)
R0, R1, R0

DW

%B 1111

; ostali bitovi su 0

Ili jednostavnije (i bolje):


OR
HALT

R0, %B 1111, R0

274

42

Rad s bitovima - Ispitivanje bitova


Treba ispitati je li broj u registru R0 paran ili neparan. Ako je paran,
treba ga upisati u R2, a inae u R2 treba upisati broj 1.
Rjeenje:
Dakle, zadatak se svodi na ispitivanje stanja jednog bita to se
ostvaruje brisanjem bitova koji se ne ispituju i testiranjem zastavice Z.
>>>>

275

43

Rad s bitovima - Ispitivanje bitova


AND
JR_Z

R0, 1, R1
PARAN

; ispitaj najnii bit


Da

Najnii bit = 0 ?

NEPARAN MOVE
JR

1, R2
KRAJ

Ne
NEPARAN: R2=1

PARAN

MOVE

KRAJ

HALT

R0, R2

PARAN: R2=R0

Mogui nedostatak: ispitivanje unitava sadraj R1


276

44

Rad s bitovima - Ispitivanje bitova


Ispitivanje stanja vie bitova
jesu li svi ispitivani bitovi jednaki nulama?

Obrisati sve bitove koje ne ispitujemo (_), a bitove koje


ispitujemo (?) ostavimo nepromijenjene
Ispitamo zastavicu Z, tj. ispitamo je li rezultat jednak
nitici:

Ako rezultat=0, onda su svi ispitivani bitovi u nulama


Ako rezultat0, onda nisu svi ispitivani bitovi u nulama

Poetni broj:
__??____?__???
?=ispitivani bit
Nakon maskiranja: 00??0000?00???
277

45

Rad s bitovima - Ispitivanje bitova


Ispitati jesu li u registru R0 u bitovima 0, 1, 30, 31 sve nule.
Ako jesu, treba obrisati R0, a inae ga ne treba mijenjati.
LOAD R1, (MASKA)
AND
R0, R1, R1
JR_NZ IMA_1
SVE_0

MOVE

0, R0

; u isp. bitovima su sve 0

IMA_1

HALT

MASKA

DW %B 11000000000000000000000000000011

; u isp. bitovima ima 1

278

46

Rad s bitovima - Ispitivanje bitova


Ispitivanje stanja vie bitova:
jesu li svi ispitivani bitovi jednaki jedinicama?
Postaviti sve bitove koje ne ispitujemo (_), a bitove koje
ispitujemo (?) ostavimo nepromijenjene
Komplementirati sve bitove
Ispitamo zastavicu Z, tj. ispitamo je li rezultat jednak
nitici:

Ako rezultat=0, onda su svi ispitivani bitovi u jedinicama


Ako rezultat0, onda nisu svi ispitivani bitovi u jedinicama

Poetni broj:

__??____?__???

Nakon maskiranja:

11??1111?11???

Nakon komplementa:

00??0000?00???

279

47

Rad s bitovima - Ispitivanje bitova


Ispitati jesu li u registru R0 u bitovima od 1 do 4 i bitovima od
12 do 17 te u bitu 30 sve jedinice. Ako jesu, treba obrisati R0, a
inae ga ne treba mijenjati.
LOAD
OR
XOR
JR_NZ

R1, (MASKA)
R0, R1, R1
R1, -1, R1
IMA_0

SVE_1
IMA_0

MOVE
HALT

0, R0

MASKA

DW %B 10111111111111000000111111100001

; komplementiranje

; u isp. bitovima su sve 1


; u isp. bitovima ima 0

280

48

Rad s bitovima Upis bitova

Sljedei upis:
0

11110011

Daje rezultat:
0

281

49

Rad s bitovima Upis bitova


Postupak upisa je sljedei:
Bitovi podatka koji se ele upisati (y) se ne mijenjaju, a
ostali se briu (_)
Bitovi registra koji se ele mijenjati (_) se obriu, a ostali
se ne mijenjaju (x)
"Poravna" se podatak "iznad" registra
Napravi se operacija OR izmeu poravnatog registra i
podatka
Podatak:
Maskirani podatak:
Poravnati podatak:
OR:

____yyyy
0000yyyy
00yyyy00

Registar:
Maskirani registar:

xx____xx
xx0000xx

xxyyyyxx

282

Primjer
U bitove 2 do 10 registra R0 treba upisati bitove 20 do 28 iz
registra R7 (brisanje+OR).

; brisanje bitova 2 do 10 u R0
LOAD R1, (MASKA0)
AND
R0, R1, R0
; brisanje svih bitova osim 20 do 28 u R7
LOAD R1, (MASKA7)
AND
R7, R1, R7
ROTR

R7, %D 18, R7

; poravnavanje

OR
HALT

R0, R7, R0

; upis u R0

MASKA0 DW %B 11111111111111111111100000000011
MASKA7 DW %B 00011111111100000000000000000000 51
283

Rad s bitovima Prebrajanje bitova


Pod prebrajanjem bitova misli se na prebrajanje nula
ili jedinica u odreenom nizu bitova u podatku
Najlake se ostvaruje naredbama rotacije (ulijevo ili
udesno) i ispitivanjem zastavice C
Rotacija radi tako da izlazni bit odlazi u zastavicu C:

. . . . . .

284

52

Rad s bitovima Prebrajanje bitova


Ako se rotacija obavlja za vie bitova, onda u
C odlazi samo izlazni bit od "zadnjeg koraka
rotacije"
Zato treba rotirati registar jedan po jedan bit
(u petlji) i ispitivati zastavicu C*
Prebrajanje bitova koristi se, npr. kod
odreivanja pariteta podatka
*Drugi nain je ispitivanje zastavice N, jer se u njoj nalazi najvii
bit registra nakon rotacije (nije toliko uobiajeno rjeenje)
285

53

Primjer
Koliko nula ima u bitovima 3 do 8 registra R0. Broj nula treba
spremiti u memorijsku lokaciju NULE.
MOVE 0, R1
; R1 = broja nula
MOVE 6, R2
; R2 = broja za petlju
ROTR R0, 3, R0 ; "izbaci" bitove 0 do 2
LOOP ROTR R0, 1, R0
JR_C JEDAN
ADD
R1, 1, R1
JEDAN
SUB
R2, 1, R2
JR_NZ LOOP
STORE R1, (NULE)
HALT
31

30

29 . . . . . . 10

. . . . . .
286

54

Viestruka preciznost

287

55

Viestruka preciznost
Dijelovi raunala (memorijske lokacije, registri, ALU,
sabirnice) su ogranieni na odreen broj bita
Npr. FRISC ima 32-bitnu arhitekturu (tj. rije mu ima 32 bita)
pa moe normalno raditi s podatcima te irine

Ako treba raditi s brojevima veeg opsega ili kakvim drugim


podatcima irima nego to stanu u rije procesora ili
memorijsku lokaciju, onda koristimo viestruku preciznost
Ovisno koliko procesorskih rijei se koristi za zapis podatka,
govorimo o dvostrukoj, trostrukoj, itd. preciznosti

288

56

Viestruka preciznost
Naelno se operacije u viestrukoj preciznosti uvijek
obavljaju jednako, bez obzira koristimo li dvostruku,
trostruku ili neku veu preciznost
Zato emo pokazati kako se koristi dvostruka preciznost

Kod zapisivanja podataka u viestrukoj preciznosti u


memoriji, treba podatak zapisivati u vie uzastopnih
lokacija

slino zapisivanju 32-bitnih rijei u bajtnoj memoriji, treba


voditi rauna o rasporedu zapisivanja pojedinih dijelova
podatka unutar memorijskih lokacija
Budui da FRISC koristi little-endian za zapis 32-bitnih
rijei unutar memorije, onda moemo koristiti isti
redoslijed i kod viestruke preciznosti (iako to nije nuno)

289

57

Viestruka preciznost - Pohrana podataka


Kod zapisivanja podatka u dvostrukoj preciznosti u registrima,
takoer se moraju koristiti dva registra
Kod oznaavanja podataka obino se koriste sufiksi L i H koji
oznaavaju:
nii dio podatka (L - low)
vii dio podatka (H - high)
Npr. podatak A u dvostrukoj preciznosti oznaava se (po
dijelovima) oznakama AL i AH

290

58

Viestruka preciznost - Zbrajanje


A3

B3

A
Cout

B
Cin
S

A2

B2

A1

A
Cout

B
Cin

A
Cout

B1

B
Cin
S

A0

B0

A
Cout

B
Cin
S

Veza koju treba


programski
ostvariti

291

59

Viestruka preciznost - Zbrajanje


Kako uraunati meuprijenos? Pomou naredbe ADC.

Podsjetnik: naredba ADC, osim dva pribrojnika,


pribraja i vrijednost prijenosa iz prethodne
operacije zbrajanja
Budui da je prijenos od zbrajanja spremljen u zastavici C, onda
naredba ADC zapravo radi ovako:
ADC X,Y,R

X+Y+prijenos R

X+Y+C R

Sklopovski se naredba ADC izvodi tako da se na ulaz C0, na


najniem potpunom zbrajalu, dovede stanje iz zastavice C
(podsjetnik: kod obinog zbrajanja dovodi se 0)

292

60

Viestruka preciznost - Primjer


Zbrojiti NBC ili 2'k brojeve u dvostrukoj preciznosti. Prvi operand
smjeten je na memorijskim lokacijama AL (nii dio) i AH (vii dio), a
drugi na lokacijama BL i BH. Rezultat se sprema na RL i RH.
; ZBROJI NIE
LOAD R0,
LOAD R1,
ADD
R0,
STORE R2,

DIJELOVE
(AL)
(BL)
R1, R2
(RL)

; ZBROJI VIE
LOAD R0,
LOAD R1,
ADC
R0,
STORE R2,

DIJELOVE
(AH)
(BH)
R1, R2
(RH)

; OPERANDI
AL
DW 0A3541E21
AH
DW 942F075F
BL
BH

DW 936104A7
DW 017F3784

; MJESTO ZA REZULTAT
RL
DW 0
RH
DW 0

HALT
293

61

Viestruka preciznost - Logike operacije


Logike operacije AND, OR, XOR, NOT rade
neovisno na pojedinim bitovima podataka
Zato nije bitan redoslijed obavljanja operacija
na pojedinim rijeima podatka - jedino treba
obaviti operacije na svim rijeima
Takoer, ne postoji nikakvi podatci, kao
meuprijenosi, koje bi trebalo prenositi
izmeu viih i niih rijei podataka
294

62

Viestruka preciznost - Pomaci i rotacije


Sklopovski ostvareni pomaci i rotacije prenose bitove izmeu
pojedinih rijei pa to takoer treba napraviti i u programu

Redoslijed operacije na pojedinim rijeima podatka nije bitan, ali


ovisno o operaciji moe biti praktiniji jedan ili drugi redoslijed. Npr.
pomak u lijevo za 1 bit:
vii dio RH

izlazni bit

nii dio RL

Prvo pomaknemo ulijevo RL. Izlazni bit je u zastavici


C. Pomaknemo RH ulijevo i upiemo C u najnii bit od
RH.
Prvo pomaknemo ulijevo RH. Zatim pomaknemo
ulijevo RL. Izlazni bit je u zastavici C. Upiemo C u
najnii bit od RH.
Oba redoslijeda izgledaju podjednako komplicirano
295

63

Viestruka preciznost - Pomaci i rotacije


Prvo pomaknemo ulijevo RL. Izlazni bit je u zastavici C. Pomaknemo
RH ulijevo i upiemo C u najnii bit od RH:
SHL
JR_C
NULA SHL
JR
JEDAN SHL
OR

RL, 1,
JEDAN
RH, 1,
DALJE
RH, 1,
RH, 1,

Rl
RH
RH
RH

Prvo pomaknemo ulijevo RH. Zatim pomaknemo ulijevo RL. Izlazni


bit je u zastavici C. Upiemo C u najnii bit od RH:
SHL
SHL
ADC

RH, 1, RH
RL, 1, RL
RH, 0, RH

Ipak je ovo
jednostavnija varijanta

296

64

Primjer:
Rotirati u desno za 1 mjesto podatak u dvostrukoj preciznosti
zapisan u registrima R0 (nia rije) i R1 (via rije).
Poetno stanje prije
rotacije i nain rotacije:
eljeno stanje nakon
rotacije u dvostrukoj
preciznosti:

R1
V

R0
X

R1
Y

Nakon neovisnih rotacija


izvedenih na R0 i R1:

R0
X

R1
X

R0
Y

Vidimo da su bitovi V i N na ispravnom mjestu,


ali bitovi X i Y moraju zamijeniti mjesta
297

65

Rjeenje:
1. varijanta: napraviti dvije obine rotacije na R0 i R1, a zatim im
zamijeniti vrijednosti najviih bitova X i Y.
2. varijanta: prvo zamijeniti najnie bitove X i Y, pa tek onda
napraviti obje rotacije. Ovo e biti programski lake.

Poetno stanje prije


rotacije i nain rotacije:
Nakon zamjene bitova
X i Y:

Nakon neovisnih rotacija


izvedenih na R0 i R1:

R1
V

R0
X

R1
V

R0
Y

R1
Y

X
R0

298

66

Kako najjednostavnije zamijeniti bitove X i Y? Oni mogu imati sljedee


vrijednosti:
X
0
0
1
1

Y
0
1
0
1

operacija
treba ih zamijeniti
treba ih zamijeniti
-

zamjenu bitova koji su


razliiti jednostavno
ostvarimo tako da ih
komplementiramo

Komplementiranje znamo napraviti od prije: XOR s maskom


Takvu masku dobivamo ako napravimo XOR izmeu R0 i R1 i zatim
obriemo sve bitove osim bita na poziciji X i Y (najnii bit)

299

67

; stvaranje maske u R3 (za zamjenu X i Y)


; ako su bitovi X i Y jednaki
=> maska=0
; ako su bitovi X i Y razliiti => maska=1
XOR
AND

R0, R1, R3
R3, 1, R3

; Usporedi najnie bitove


; u R0 i R1, tj. bitove X i Y.

; zamjena najniih bitova R0 i R1 (tj. X i Y)

XOR
XOR

R3, R0, R0
R3, R1, R1

; Nezavisna rotacija R0 i R1

ROTR
ROTR

R0,
R1,

1, R0
1, R1

HALT
300

68

Potprogrami

301

Potprogrami
Namjena potprograma u asemblerskom
programiranju ista je kao i u viim programskim
jezicima.
emu slui potprogram znate ve od prije (iz PIPI-ja):
bolja modularnost i organizacija programa
lake programiranje
poveana itljivost
lake odravanje programa
manje zauzee memorije

302

Potprogrami
Kao i u viim programskim jezicima, moramo znati kako se koriste
potprogrami, ali u asemberskom programiranju moramo dodatno
znati i neke detalje "nie razine"
Trebamo znati:
Kako se potprogram poziva i kako se vraamo iz potprograma
Gdje se sprema povratna adresa
Kako se prenose parametri i vraaju rezultati iz potprograma
Gdje se uvaju lokalne varijable potprograma
Kako se ostvaruje da stanja registara iz glavnog programa ne
budu promijenjena za vrijeme potprograma

U viim programskim jezicima, o ovim stvarima uglavnom ne


moramo voditi rauna jer se o njima brine prevoditelj (koji
stvara asemblersku verziju naeg programa)
303

Potprogrami
poziv
potprograma
POTP
mjesto
povratka iz
potprograma
adresa (labela)
potprograma
POTP
povratak iz
potprograma
POTP

...
SUB R0, R1, R2
CALL POTP
ADD R3, R4, R5
...
POTP XOR R1, R4, R3
...
LOAD R2, (R5)
RET

glavni
program

potprogram
POTP

304

Potprogrami - CALL i RET


Podsjetnik: kako rade naredbe CALL i
RET?
Naredba: CALL adresa_potprograma
sprema povratnu adresu iz PC-a na stog
to je adresa naredbe IZA naredbe CALL, jer za
vrijeme izvoenja naredbe CALL, PC ve pokazuje
na sljedeu naredbu, tj. sadri povratnu adresu
skae na zadanu adresu adresa_potprograma

Naredba: RET
uzima podatak (povratnu adresu) sa stoga
skae na tu povratnu adresu
305

Potprogrami - CALL i RET


Gdje se u memoriji nalazi stog ???
Poloaj stoga u memoriji definiramo programski na
poetku glavnog programa gdje MORAMO
inicijalizirati pokaziva stoga (SP)
Ako to zaboravimo uiniti, doi e do greke u
programu (u ATLAS-u e vjerojatno javiti greku
"itanje sa sabirnice u stanju High Z")

306

Potprogrami - stog
Na najniim adresama se nalazi
program i varijable/konstante.
Iza toga se nalazi podruje
gomile (heap). Gomila dinamiki
raste prema najviim adresama.
(nema veze sa strukturom

podataka koja se takoer naziva


heap - iz "Algoritama i struktura
podataka").

Na najviim adresama se nalazi


stog koji raste prema niim
adresama.

0000 0000

. . . . . . .

Tipina organizacija memorije:

FFFF FFFF

Program i
varijable/konst.
(fiksna veliina)
Gomila (heap):
malloc i free

Stog (stack):
push i pop

307

Potprogrami - stog
Mi emo pretpostaviti da je na FRISC spojena memorija od 64 KB. Najvia
adresa (8-bitne memorijske lokacije) u memoriji od 64 KB je FFFF

Na stog se uvijek stavljaju 32-bitni podatci pa im adrese moraju biti


djeljive sa 4
FFFC je adresa 32-bitnog podatka koji je "na zadnjoj 32-bitnoj lokaciji",
tj. "na najviim lokacijama memorije"

Budui da SP pokazuje na zadnji podatak na stogu (podatak koji na


poetku jo ne postoji), onda SP inicijaliziramo na jednu 32-bitnu rije
dalje: 4+FFFC = 10000

...

...

FFF4 - FFF7

itd. 32b rije

FFF8 - FFFB

predzadnja 32b rije

FFFC - FFFF

zadnja 32b rije

10000 - 10003

308

Potprogrami - Parametri i rezultati

tip povratne
vrijednosti

parametri i njihovi tipovi

int min ( int a, int b ) {


if( a < b )
return a;
else
return b;
povratna
}
vrijednost

309

10

Potprogrami - Parametri i rezultati


U viim programskim jezicima parametri i povratna
vrijednost imaju tipove koje provjerava prevoditelj

U asembleru nema nikakvih provjera ni tipova:

Dunost je programera da se brine kakve podatke alje u


potprogram i kakve rezultate prima iz potprograma
Velika fleksibilnost u programiranju
Velika mogunost greke u programu

Terminologija:
parametar (formalni parametar) - "varijabla" u
potprogramu preko koje potprogram prima vrijednosti od
pozivatelja
argument (stvarni parametar) - stvarna vrijednost koju
pozivatelj alje potprogramu preko njegovih parametara

310

11

Potprogrami - Parametri i rezultati


Tri najea naina slanja parametara i vraanja
povratne vrijednosti:
Pomou registara
Pomou fiksnih memorijskih lokacija
Pomou stoga

Teorijski je mogue slobodno kombinirati vie


razliitih naina prijenosa u jednom potprogramu.
Na primjer:

prvi parametar prenosi se registrom, drugi stogom, a


ostali pomou fiksnih lokacija
prvi rezultat se vraa stogom, a drugi fiksnom
lokacijom
311

12

Prijenos registrima

312

13

Potprogrami - Prijenos registrima


Za svaki potprogram zasebno, propie se preko kojih
registara prima podatke i preko kojih vraa rezultate

Pozivatelj potprograma (glavni program ili bilo koji drugi


potprogram) prije poziva mora staviti argumente u zadane
registre
Potprogram polazi od pretpostavke da su u zadanim
registrima argumenti i koristi ih pri izraunavanju rezultata
Potprogram mora staviti rezultat u zadane registre

Pozivatelj, nakon povratka iz potrograma, pretpostavlja da


se u zadanim registrima nalaze rezultati i koristi ih

313

14

Potprogrami - Prijenos registrima


Primjer:
Napisati potprogram koji izraunava logiku operaciju NILI
izmeu registara R0 i R1 i vraa rezultat registrom R2. Glavni
program iz memorije uitava dva podatka za koje rauna NILI
(pomou potprograma) i rezultat sprema natrag u memoriju.
Rjeenje:
(na sljedeem slajdu)
>>>>
314

15

<<<<
Pratimo stanje sljedeih
registara/lokacija:
tri registra ope
namjene koje
koristimo
pokaziva stoga

dio memorije s
podatcima

dio memorije u
kojem je stog

R0
R1

R2

R7 tj. SP

. . .
1234ABCD

PRVI

22445599
0

DRUGI
REZ

FFF4

FFF8

FFFC
10000

315

16

<<<< Izvoenje programa:


0

R0
R1

R2

R7 tj. SP

GLAVNI MOVE
LOAD
LOAD
CALL
STORE

10000, SP
R0, (PRVI)
R1, (DRUGI)
NILI
R2, (REZ)

HALT

NILI

PRVI
DRUGI
REZ

OR R0, R1, R2
XOR R2, -1, R2
RET
DW
DW
DW

1234ABCD
22445599
0

. . .
1234ABCD

PRVI

22445599
0

DRUGI
REZ

FFF4

FFF8

FFFC
10000

316

17

<<<< Izvoenje programa:


0

R0
R1

R2

10000

R7 tj. SP

GLAVNI MOVE
LOAD
LOAD
CALL
STORE

10000, SP
R0, (PRVI)
R1, (DRUGI)
NILI
R2, (REZ)

HALT

NILI

PRVI
DRUGI
REZ

OR R0, R1, R2
XOR R2, -1, R2
RET
DW
DW
DW

1234ABCD
22445599
0

. . .
1234ABCD

PRVI

22445599
0

DRUGI
REZ

FFF4

FFF8

FFFC
10000

317

18

<<<< Izvoenje programa:

GLAVNI MOVE
LOAD
LOAD
CALL
STORE

10000, SP
R0, (PRVI)
R1, (DRUGI)
NILI
R2, (REZ)

HALT

NILI

PRVI
DRUGI
REZ

OR R0, R1, R2
XOR R2, -1, R2
RET
DW
DW
DW

1234ABCD
22445599
0

1234ABCD R0
0

R1

R2

10000

R7 tj. SP

. . .
1234ABCD

PRVI

22445599
0

DRUGI
REZ

FFF4

FFF8

FFFC
10000

318

19

<<<< Izvoenje programa:

GLAVNI MOVE
LOAD
LOAD
CALL
STORE

10000, SP

22445599 R1

R0, (PRVI)
R1, (DRUGI)
NILI
R2, (REZ)

R2

10000

R7 tj. SP

HALT

NILI

PRVI
DRUGI
REZ

OR R0, R1, R2
XOR R2, -1, R2
RET
DW
DW
DW

1234ABCD R0

1234ABCD
22445599
0

. . .
1234ABCD

PRVI

22445599
0

DRUGI
REZ

FFF4

FFF8

FFFC
10000

319

20

<<<< Izvoenje programa:

GLAVNI MOVE
LOAD
LOAD
CALL
STORE

10000, SP
R0, (PRVI)
R1, (DRUGI)
NILI
R2, (REZ)

HALT

NILI

PRVI
DRUGI
REZ

1234ABCD
22445599
0

0
4
8
C
10
14

OR R0, R1, R2
XOR R2, -1, R2
RET
DW
DW
DW

1234ABCD R0
22445599 R1

R2

FFFC

R7 tj. SP

. . .
1234ABCD

PRVI

22445599
0

DRUGI
REZ

FFF4

FFF8

FFFC
00000010 je adresa naredbe STORE 10000
00000010

320

21

<<<< Izvoenje programa:

GLAVNI MOVE
LOAD
LOAD
CALL
STORE

10000, SP

22445599 R1

R0, (PRVI)
R1, (DRUGI)
NILI
R2, (REZ)

R2

FFFC

R7 tj. SP

HALT

NILI

PRVI
DRUGI
REZ

OR R0, R1, R2
XOR R2, -1, R2
RET
DW
DW
DW

1234ABCD R0

1234ABCD
22445599
0

. . .
1234ABCD

PRVI

22445599
0

DRUGI
REZ

FFF4

FFF8

00000010

FFFC
10000

321

22

<<<< Izvoenje programa:

GLAVNI MOVE
LOAD
LOAD
CALL
STORE

10000, SP

22445599 R1

R0, (PRVI)
R1, (DRUGI)
NILI
R2, (REZ)

3274FFDD R2

HALT

NILI

PRVI
DRUGI
REZ

OR R0, R1, R2
XOR R2, -1, R2
RET
DW
DW
DW

1234ABCD R0

1234ABCD
22445599
0

FFFC

R7 tj. SP

. . .
1234ABCD

PRVI

22445599
0

DRUGI
REZ

FFF4

FFF8

00000010

FFFC
10000

322

23

<<<< Izvoenje programa:

GLAVNI MOVE
LOAD
LOAD
CALL
STORE

10000, SP

22445599 R1

R0, (PRVI)
R1, (DRUGI)
NILI
R2, (REZ)

CD8B0022 R2

HALT

NILI

PRVI
DRUGI
REZ

OR R0, R1, R2
XOR R2, -1, R2
RET
DW
DW
DW

1234ABCD R0

1234ABCD
22445599
0

FFFC

R7 tj. SP

. . .
1234ABCD

PRVI

22445599
0

DRUGI
REZ

FFF4

FFF8

00000010

FFFC
10000

323

24

<<<< Izvoenje programa:

GLAVNI MOVE
LOAD
LOAD
CALL
STORE

10000, SP

22445599 R1

R0, (PRVI)
R1, (DRUGI)
NILI
R2, (REZ)

CD8B0022 R2

HALT

NILI

PRVI
DRUGI
REZ

OR R0, R1, R2
XOR R2, -1, R2
RET
DW
DW
DW

1234ABCD R0

1234ABCD
22445599
0

10000

R7 tj. SP

. . .
1234ABCD

PRVI

22445599
0

DRUGI
REZ

FFF4

FFF8

00000010

FFFC
10000

324

25

<<<< Izvoenje programa:

GLAVNI MOVE
LOAD
LOAD
CALL
STORE

10000, SP

22445599 R1

R0, (PRVI)
R1, (DRUGI)
NILI
R2, (REZ)

CD8B0022 R2

HALT

NILI

PRVI
DRUGI
REZ

OR R0, R1, R2
XOR R2, -1, R2
RET
DW
DW
DW

1234ABCD R0

1234ABCD
22445599
0

10000

R7 tj. SP

. . .
1234ABCD

PRVI

22445599
0

DRUGI
REZ

FFF4

FFF8

00000010

FFFC
10000

325

26

<<<< Izvoenje programa:

GLAVNI MOVE
LOAD
LOAD
CALL
STORE

10000, SP

22445599 R1

R0, (PRVI)
R1, (DRUGI)
NILI
R2, (REZ)

CD8B0022 R2

HALT

NILI

PRVI
DRUGI
REZ

OR R0, R1, R2
XOR R2, -1, R2
RET
DW
DW
DW

1234ABCD R0

1234ABCD
22445599
0

10000

R7 tj. SP

. . .
1234ABCD

PRVI

22445599
CD8B0022

DRUGI
REZ

FFF4

FFF8

00000010

FFFC
10000

326

27

<<<< Izvoenje programa:

GLAVNI MOVE
LOAD
LOAD
CALL
STORE

10000, SP

22445599 R1

R0, (PRVI)
R1, (DRUGI)
NILI
R2, (REZ)

CD8B0022 R2

HALT

NILI

PRVI
DRUGI
REZ

OR R0, R1, R2
XOR R2, -1, R2
RET
DW
DW
DW

1234ABCD R0

1234ABCD
22445599
0

10000

R7 tj. SP

. . .
1234ABCD

PRVI

22445599
CD8B0022

DRUGI
REZ

FFF4

FFF8

00000010

FFFC
10000

327

28

Komentar:
Treba uoiti da ovaj potprogram
mijenja samo sadraj registra R2 (ne
raunajui R7). Meutim, R2 je
registar preko kojeg se vraa
vrijednost, tj. glavni program oekuje
da e taj registar biti promijenjen
nakon povratka iz potprograma. Zato
glavni program prije poziva
potprograma ne smije imati u R2
spremljen nikakav podatak koji bi mu
jo mogao zatrebati.
Registre R0 i R1 promijenio je glavni
program, jer je preko njih slao
parametre. Zato je za pretpostaviti da
glavni program nije imao nikakve
korisne podatke u R0 i R1 prije upisa
parametara u njih.

1234ABCD R0
22445599 R1

CD8B0022 R2
10000

R7 tj. SP

. . .
1234ABCD

PRVI

22445599
CD8B0022

DRUGI
REZ

FFF4

FFF8

00000010

FFFC
10000

328

29

<<<< (kompletan listing programa s komentarima)

; glavni program
GLAVNI MOVE 10000, SP
LOAD
LOAD
CALL
STORE

R0, (PRVI)
R1, (DRUGI)
NILI
R2, (REZ)

;vano: inicijaliziraj SP !!!


;vrijednost u prvi parametar
;vrijednost u drugi parametar
;poziv potprograma
;spremanje rezultata

HALT

NILI

PRVI
DRUGI
REZ

; potprogram NILI
OR R0, R1, R2 ; koriste se parametri R0 i R1
XOR R2, -1, R2 ; rezultat se upisuje u R2
RET
; povratak iz potprograma
; podatci i mjesto za rezultat
DW 1234ABCD
DW 22445599
DW 0
329

30

Potprogrami - Prijenos registrima


Prijenos registrima
Prednosti:
Brz prijenos (rad s registrima je najbri)
Jednostavan prijenos (sa stajalita programiranja)
Nedostatci:
Moe se prenijeti ogranien broj argumenata (najvie
7)
Registri obino uvaju meurezultate i nisu slobodni za
koritenje kao parametri
Nije mogue rekurzivno pozivanje potprograma

330

31

Prijenos fiksnim lokacijama

331

32

Potprogrami - Prijenos fiksnim lok.


Pod fiksnim lokacijama misli se na memorijske lokacije ija
adresa je unaprijed zadana i ne mijenja se tijekom programa

Za svaki potprogram zasebno, propie se preko kojih fiksnih


memorijskih lokacija prima podatke i preko kojih vraa rezultate
Pozivatelj prije poziva mora staviti argumente u zadane lokacije

Potprogram polazi od pretpostavke da su u zadanim lokacijama


argumenti i koristi ih pri izraunavanju rezultata
Potprogram mora staviti rezultat u zadane lokacije
Pozivatelj, nakon povratka iz potrograma, pretpostavlja da se u
zadanim lokacijama nalaze rezultati i koristi ih

332

33

Potprogrami - Prijenos fiksnim lokacijama


Primjer:
Napisati potprogram koji izraunava logiku operaciju NILI.
Parametri se nalaze na memorijskim lokacijama P1 i P2, a
rezultat se vraa lokacijom R_NILI. Glavni program iz memorije
uitava dva podatka za koje rauna NILI (pomou potprograma)
i rezultat sprema natrag u memoriju.
Rjeenje:
na sljedeem slajdu

>>>>

333

34

<<<< Izvoenje programa:


0

R0
R1

R7 tj. SP

GLAVNI MOVE

10000, SP

LOAD R0, (PRVI)


STORE R0, (P1)

LOAD R0, (DRUGI)


STORE R0, (P2)
CALL

NILI

LOAD R0, (R_NILI)


STORE R0, (REZ)
HALT

. . .
0
0

0
1234ABCD
22445599
0
0
0

P1
P2
R_NILI
PRVI
DRUGI
REZ
FFF8
FFFC
10000

334

35

<<<< Izvoenje programa:


0

R0
R1

10000

R7 tj. SP

GLAVNI MOVE

10000, SP

LOAD R0, (PRVI)


STORE R0, (P1)

LOAD R0, (DRUGI)


STORE R0, (P2)
CALL

NILI

LOAD R0, (R_NILI)


STORE R0, (REZ)
HALT

. . .
0
0

0
1234ABCD
22445599
0
0
0

P1
P2
R_NILI
PRVI
DRUGI
REZ
FFF8
FFFC
10000

335

36

<<<< Izvoenje programa:

GLAVNI MOVE

10000, SP

LOAD R0, (PRVI)


STORE R0, (P1)

LOAD R0, (DRUGI)


STORE R0, (P2)
CALL

NILI

LOAD R0, (R_NILI)


STORE R0, (REZ)
HALT

1234ABCD R0
0

R1

10000

R7 tj. SP

. . .
0
0

0
1234ABCD
22445599
0
0
0

P1
P2
R_NILI
PRVI
DRUGI
REZ
FFF8
FFFC
10000

336

37

<<<< Izvoenje programa:

GLAVNI MOVE

10000, SP

LOAD R0, (PRVI)


STORE R0, (P1)

LOAD R0, (DRUGI)


STORE R0, (P2)
CALL

NILI

LOAD R0, (R_NILI)


STORE R0, (REZ)
HALT

1234ABCD R0
0

R1

10000

R7 tj. SP

. . .
1234ABCD
0

0
1234ABCD
22445599
0
0
0

P1
P2
R_NILI
PRVI
DRUGI
REZ
FFF8
FFFC
10000

337

38

<<<< Izvoenje programa:

GLAVNI MOVE

10000, SP

LOAD R0, (PRVI)


STORE R0, (P1)

LOAD R0, (DRUGI)


STORE R0, (P2)
CALL

NILI

LOAD R0, (R_NILI)


STORE R0, (REZ)
HALT

22445599 R0
0

R1

10000

R7 tj. SP

. . .
1234ABCD
0

0
1234ABCD
22445599
0
0
0

P1
P2
R_NILI
PRVI
DRUGI
REZ
FFF8
FFFC
10000

338

39

<<<< Izvoenje programa:

GLAVNI MOVE

10000, SP

LOAD R0, (PRVI)


STORE R0, (P1)

LOAD R0, (DRUGI)


STORE R0, (P2)
CALL

NILI

LOAD R0, (R_NILI)


STORE R0, (REZ)
HALT

22445599 R0
0

R1

10000

R7 tj. SP

. . .
1234ABCD
22445599

0
1234ABCD
22445599
0
0
0

P1
P2
R_NILI
PRVI
DRUGI
REZ
FFF8
FFFC
10000

339

40

<<<< Izvoenje programa:

GLAVNI MOVE

10000, SP

LOAD R0, (PRVI)


STORE R0, (P1)

LOAD R0, (DRUGI)


STORE R0, (P2)
CALL

NILI

LOAD R0, (R_NILI)


STORE R0, (REZ)
HALT

22445599 R0
0

R1

FFFC

R7 tj. SP

. . .
1234ABCD
22445599

0
1234ABCD
22445599
0
0
00000018

P1
P2
R_NILI
PRVI
DRUGI
REZ
FFF8
FFFC
10000

340

41

<<<< Izvoenje programa:

NILI

LOAD
LOAD
OR
XOR

R0, (P1)
R1, (P2)
R0, R1, R0
R0, -1, R0

STORE R0, (R_NILI)


RET

22445599 R0
0

R1

FFFC

R7 tj. SP

. . .
1234ABCD
22445599

0
1234ABCD
22445599
0
0
00000018

P1
P2
R_NILI
PRVI
DRUGI
REZ
FFF8
FFFC
10000

341

42

<<<< Izvoenje programa:

NILI

LOAD
LOAD
OR
XOR

R0, (P1)
R1, (P2)
R0, R1, R0
R0, -1, R0

STORE R0, (R_NILI)


RET

1234ABCD R0
0

R1

FFFC

R7 tj. SP

. . .
1234ABCD
22445599

0
1234ABCD
22445599
0
0
00000018

P1
P2
R_NILI
PRVI
DRUGI
REZ
FFF8
FFFC
10000

342

43

<<<< Izvoenje programa:

NILI

LOAD
LOAD
OR
XOR

R0, (P1)
R1, (P2)
R0, R1, R0
R0, -1, R0

STORE R0, (R_NILI)


RET

1234ABCD R0
22445599 R1

FFFC

R7 tj. SP

. . .
1234ABCD
22445599

0
1234ABCD
22445599
0
0
00000018

P1
P2
R_NILI
PRVI
DRUGI
REZ
FFF8
FFFC
10000

343

44

<<<< Izvoenje programa:

NILI

LOAD
LOAD
OR
XOR

R0, (P1)
R1, (P2)
R0, R1, R0
R0, -1, R0

STORE R0, (R_NILI)


RET

3274FFDD R0
22445599 R1

FFFC

R7 tj. SP

. . .
1234ABCD
22445599

0
1234ABCD
22445599
0
0
00000018

P1
P2
R_NILI
PRVI
DRUGI
REZ
FFF8
FFFC
10000

344

45

<<<< Izvoenje programa:

NILI

LOAD
LOAD
OR
XOR

R0, (P1)
R1, (P2)
R0, R1, R0
R0, -1, R0

STORE R0, (R_NILI)


RET

CD8B0022 R0
22445599 R1

FFFC

R7 tj. SP

. . .
1234ABCD
22445599

0
1234ABCD
22445599
0
0
00000018

P1
P2
R_NILI
PRVI
DRUGI
REZ
FFF8
FFFC
10000

345

46

<<<< Izvoenje programa:

NILI

LOAD
LOAD
OR
XOR

R0, (P1)
R1, (P2)
R0, R1, R0
R0, -1, R0

STORE R0, (R_NILI)


RET

CD8B0022 R0
22445599 R1

FFFC

R7 tj. SP

. . .
1234ABCD
22445599

CD8B0022
1234ABCD
22445599
0
0
00000018

P1
P2
R_NILI
PRVI
DRUGI
REZ
FFF8
FFFC
10000

346

47

<<<< Izvoenje programa:

NILI

LOAD
LOAD
OR
XOR

R0, (P1)
R1, (P2)
R0, R1, R0
R0, -1, R0

STORE R0, (R_NILI)


RET

CD8B0022 R0
22445599 R1

10000

R7 tj. SP

. . .
1234ABCD
22445599

CD8B0022
1234ABCD
22445599
0
0
00000018

P1
P2
R_NILI
PRVI
DRUGI
REZ
FFF8
FFFC
10000

347

48

<<<< Izvoenje programa:

GLAVNI MOVE

10000, SP

LOAD R0, (PRVI)


STORE R0, (P1)

LOAD R0, (DRUGI)


STORE R0, (P2)
CALL

NILI

LOAD R0, (R_NILI)


STORE R0, (REZ)
HALT

CD8B0022 R0
22445599 R1

10000

R7 tj. SP

. . .
1234ABCD
22445599

CD8B0022
1234ABCD
22445599
0
0
00000018

P1
P2
R_NILI
PRVI
DRUGI
REZ
FFF8
FFFC
10000

348

49

<<<< Izvoenje programa:

GLAVNI MOVE

10000, SP

LOAD R0, (PRVI)


STORE R0, (P1)

LOAD R0, (DRUGI)


STORE R0, (P2)
CALL

NILI

LOAD R0, (R_NILI)


STORE R0, (REZ)
HALT

CD8B0022 R0
22445599 R1

10000

R7 tj. SP

. . .
1234ABCD
22445599

CD8B0022
1234ABCD
22445599
0
0
00000018

P1
P2
R_NILI
PRVI
DRUGI
REZ
FFF8
FFFC
10000

349

50

<<<< Izvoenje programa:

GLAVNI MOVE

10000, SP

LOAD R0, (PRVI)


STORE R0, (P1)

LOAD R0, (DRUGI)


STORE R0, (P2)
CALL

NILI

LOAD R0, (R_NILI)


STORE R0, (REZ)
HALT

CD8B0022 R0
22445599 R1

10000

R7 tj. SP

. . .
1234ABCD
22445599

CD8B0022
1234ABCD
22445599
CD8B0022
0
00000018

P1
P2
R_NILI
PRVI
DRUGI
REZ
FFF8
FFFC
10000

350

51

<<<< Izvoenje programa:

GLAVNI MOVE

10000, SP

LOAD R0, (PRVI)


STORE R0, (P1)

LOAD R0, (DRUGI)


STORE R0, (P2)
CALL

NILI

LOAD R0, (R_NILI)


STORE R0, (REZ)
HALT

CD8B0022 R0
22445599 R1

10000

R7 tj. SP

. . .
1234ABCD
22445599

CD8B0022
1234ABCD
22445599
CD8B0022
0
00000018

P1
P2
R_NILI
PRVI
DRUGI
REZ
FFF8
FFFC
10000

351

52

<<<< (kompletan listing s komentarima)

; glavni program
GLAVNI MOVE 10000, SP

;vano: inicijaliziraj SP !!!

; stavi vrijednost u prvi parametar


LOAD R0, (PRVI)
STORE R0, (P1)
; stavi vrijednost u drugi parametar
LOAD R0, (DRUGI)
STORE R0, (P2)
CALL

NILI

;poziv potprograma

; uzmi rezultat i spremi ga


LOAD R0, (R_NILI)
STORE R0, (REZ)
;spremanje rezultata
HALT
>>>>
352

53

<<<<

NILI

; potprogram NILI
LOAD R0, (P1)
LOAD R1, (P2)

; dohvat prvog parametra


; dohvat drugog parametra

OR
XOR

; Izraunavanje
; rezultata.

R0, R1, R0
R0, -1, R0

STORE R0, (R_NILI) ; upis rezultata u memoriju


RET

; fiksne lokacije za parametre


; i povratnu vrijednost
P1
DW 0
P2
DW 0
R_NILI DW 0
PRVI
DRUGI
REZ

; podatci i mjesto za rezultat


DW 1234ABCD
DW 22445599
DW 0

>>>>

353

54

Komentar
Prethodni potprogram ima znaajan nedostatak, a to je
promjena vrijednosti u registrima R0 i R1. Ukoliko je glavni
program imao u njima podatke koji e mu jo trebati, oni e
nakon poziva potprograma biti izgubljeni i glavni program nee
raditi ispravno.

Jedna (loa) mogunost je da se za svaki potprogram zna koje


registre mijenja. Tada se pri izradi programa mora voditi rauna
da na mjestima pozivanja potprograma u tim registrima ne budu
nikakvi korisni podatci.
Bolje rjeenje je da potprogram "sauva" sadraje
registara koje e mijenjati.
354

55

Ovo je bio na potprogram koji mijenja


registre (R0 i R1):
NILI
LOAD
LOAD

R0, (P1)
R1, (P2)

; dohvat prvog parametra


; dohvat drugog parametra

OR
XOR

R0, R1, R0
R0, -1, R0

; Izraunavanje
; rezultata.

STORE R0, (R_NILI) ; upis rezultata u memoriju

RET

355

56

Ovo je potprogram koji sprema registre koje mijenja


Registri se spremaju na fiksne memorijske lokacije
NILI

STORE R0, (R0_SPREM)


STORE R1, (R1_SPREM)

; spremi R0 i R1 na
; fiksne lokacije

LOAD
LOAD

R0, (P1)
R1, (P2)

; dohvat prvog parametra


; dohvat drugog parametra

OR
XOR

R0, R1, R0
R0, -1, R0

; Izraunavanje
; rezultata.

STORE R0, (R_NILI) ; upis rezultata u memoriju


LOAD
LOAD
RET
R0_SPREM
R1_SPREM

DW
DW

R0, (R0_SPREM)
R1, (R1_SPREM)
0
0

; obnovi vrijednosti
; registara R0 i R1

; Dodatne lokacije za
; spremanje registara

Ovakvo spremanje onemoguuje rekurzivne pozive i zahtijeva


definiranje posebnih memorijskih lokacija - nije idealno

356

57

Bolje rjeenje je spremanje na stog:

NILI

PUSH
PUSH

R0
R1

; spremi R0 i R1
; na stog

LOAD
LOAD

R0, (P1)
R1, (P2)

; dohvat prvog parametra


; dohvat drugog parametra

OR
XOR

R0, R1, R0
R0, -1, R0

; Izraunavanje
; rezultata.

STORE R0, (R_NILI) ; upis rezultata u memoriju


POP
POP
RET

R1
R0

; obnovi vrijednosti registara


; R0 i R1 (OPREZ: REDOSLIJED!!!)

Ovakvo spremanje je bolje, omoguuje rekurzivne pozive i


uobiajeno se koristi

357

58

Stog tijekom izvoenja:


GLAVNI ...
CALL
LOAD
...
NILI

PUSH
PUSH

NILI
R0, (R_NILI)

R0
R1

... ; naredbe
... ; potprograma
POP
POP
RET

0
0
0
0

R1
R0

SP

FFF0
FFF4
FFF8
FFFC
10000
358

59

Stog tijekom izvoenja:


GLAVNI ...
CALL
LOAD
...
NILI

PUSH
PUSH

NILI
R0, (R_NILI)

R0
R1

... ; naredbe
... ; potprograma
POP
POP
RET

0
0
0
povr.adr

R1
R0

SP

FFF0
FFF4
FFF8
FFFC
10000
359

60

Stog tijekom izvoenja:


GLAVNI ...
CALL
LOAD
...
NILI

PUSH
PUSH

NILI
R0, (R_NILI)

R0
R1

... ; naredbe
... ; potprograma
POP
POP
RET

0
0
0
povr.adr

R1
R0

SP

FFF0
FFF4
FFF8
FFFC
10000
360

61

Stog tijekom izvoenja:


GLAVNI ...
CALL
LOAD
...
NILI

PUSH
PUSH

NILI
R0, (R_NILI)

R0
R1

... ; naredbe
... ; potprograma
POP
POP
RET

0
0
R0
povr.adr

R1
R0

SP

FFF0
FFF4
FFF8
FFFC
10000
361

62

Stog tijekom izvoenja:


GLAVNI ...
CALL
LOAD
...
NILI

PUSH
PUSH

NILI
R0, (R_NILI)

R0
R1

... ; naredbe
... ; potprograma
POP
POP
RET

0
R1
R0
povr.adr

R1
R0

SP

FFF0
FFF4
FFF8
FFFC
10000
362

63

Stog tijekom izvoenja:


GLAVNI ...
CALL
LOAD
...
NILI

PUSH
PUSH

NILI
R0, (R_NILI)

R0
R1

Registri R0 i R1 se mijenjaju.
Stanje stoga se ne mijenja
(smije se mijenjati, ako nakon
naredaba potprograma stanje
bude jednako kao prije njih)

... ; naredbe
... ; potprograma
POP
POP
RET

0
R1
R0
povr.adr

R1
R0

SP

FFF0
FFF4
FFF8
FFFC
10000
363

64

Stog tijekom izvoenja:


GLAVNI ...
CALL
LOAD
...
NILI

PUSH
PUSH

NILI
R0, (R_NILI)
Registar R1 se obnavlja.

R0
R1

... ; naredbe
... ; potprograma
POP
POP
RET

0
R1
R0
povr.adr

R1
R0

SP

FFF0
FFF4
FFF8
FFFC
10000
364

65

Stog tijekom izvoenja:


GLAVNI ...
CALL
LOAD
...
NILI

PUSH
PUSH

NILI
R0, (R_NILI)

R0
R1

Registar R0 se obnavlja.

... ; naredbe
... ; potprograma
POP
POP
RET

0
R1
R0
povr.adr

R1
R0

SP

FFF0
FFF4
FFF8
FFFC
10000
365

66

Stog tijekom izvoenja:


GLAVNI ...
CALL
LOAD
...
NILI

PUSH
PUSH

NILI
R0, (R_NILI)

R0
R1

... ; naredbe
... ; potprograma
POP
POP
RET

0
R1
R0
povr.adr

R1
R0

SP

FFF0
FFF4
FFF8
FFFC
10000
366

67

Stog tijekom izvoenja:


GLAVNI ...
CALL
LOAD
...
NILI

PUSH
PUSH

NILI
R0, (R_NILI)

R0
R1

... ; naredbe
... ; potprograma
POP
POP
RET

0
R1
R0
povr.adr

R1
R0

SP

FFF0
FFF4
FFF8
FFFC
10000
367

68

Prijenos stogom

368

Potprogrami - Prijenos stogom


Pozivatelj prije poziva mora staviti argumente na stog
Oprez: naredba CALL stavlja povratnu adresu na
stog
Potprogram polazi od pretpostavke da su na stogu ispod
povratne adrese argumenti i koristi ih pri izraunavanju
rezultata (kako?)
Potprogram mora staviti rezultat na stog (kako?)
Oprez: naredba RET uzima s vrha stoga povratnu
adresu

Pozivatelj, nakon povratka iz potprograma, pretpostavlja


da se na vrhu stoga nalaze rezultati koje uzima sa stoga i
koristi ih
369

Potprogrami - Prijenos stogom


Problem je povratna adresa koja se automatski stavlja i
uzima na stog naredbama CALL i RET.
Ova povratna adresa:
smeta dohvatu argumenata sa stoga
smeta stavljanju rezultata na stog
Ispravno baratanje sa stogom mogue je na vie naina,
ali treba poznavati kako radi stog i naredbe CALL i RET

370

Potprogrami - Prijenos stogom


Napisati potprogram koji izraunava logiku operaciju NILI.
Parametri i rezultat se prenose stogom. Glavni program iz
memorije uitava dva podatka za koje rauna NILI (pomou
potprograma) i rezultat sprema natrag u memoriju.
Rjeenje:
U ovom rjeenju potprogram mijenja registre R0, R1 i R2, ali ne
uva njihove vrijednosti (LOE!!!)

Kasnije emo pokazati bolje rjeenje (ovo je samo primjer kako se


moe zaobii povratna adresa pri slanju parametara i povratu
rezultata)
371
>>>>

<<<< Izvoenje programa:


0

R0
R1

R2

R7 tj. SP

0
0
0
0

FFF0
FFF4
FFF8
FFFC
10000

GLAVNI MOVE

10000, SP

LOAD
PUSH

R0, (PRVI)
R0

LOAD
PUSH

R0, (DRUGI)
R0

CALL

NILI

POP
R0
STORE R0, (REZ)
HALT

372

<<<< Izvoenje programa:


0

R0
R1

R2

10000

R7 tj. SP

0
0
0
0

FFF0
FFF4
FFF8
FFFC
10000

GLAVNI MOVE

10000, SP

LOAD
PUSH

R0, (PRVI)
R0

LOAD
PUSH

R0, (DRUGI)
R0

CALL

NILI

POP
R0
STORE R0, (REZ)
HALT

373

<<<< Izvoenje programa:


0

R0
R1

R2

10000

R7 tj. SP

0
0
0
0

FFF0
FFF4
FFF8
FFFC
10000

param.1

GLAVNI MOVE

10000, SP

LOAD
PUSH

R0, (PRVI)
R0

LOAD
PUSH

R0, (DRUGI)
R0

CALL

NILI

POP
R0
STORE R0, (REZ)
HALT

374

<<<< Izvoenje programa:


0

R0
R1

R2

FFFC

R7 tj. SP

0
0
0
param.1

FFF0
FFF4
FFF8
FFFC
10000

param.1

GLAVNI MOVE

10000, SP

LOAD
PUSH

R0, (PRVI)
R0

LOAD
PUSH

R0, (DRUGI)
R0

CALL

NILI

POP
R0
STORE R0, (REZ)
HALT

375

<<<< Izvoenje programa:


0

R0
R1

R2

FFFC

R7 tj. SP

0
0
0
param.1

FFF0
FFF4
FFF8
FFFC
10000

param.2

GLAVNI MOVE

10000, SP

LOAD
PUSH

R0, (PRVI)
R0

LOAD
PUSH

R0, (DRUGI)
R0

CALL

NILI

POP
R0
STORE R0, (REZ)
HALT

376

10

<<<< Izvoenje programa:


0

R0
R1

R2

FFF8

R7 tj. SP

0
0
param.2
param.1

FFF0
FFF4
FFF8
FFFC
10000

param.2

GLAVNI MOVE

10000, SP

LOAD
PUSH

R0, (PRVI)
R0

LOAD
PUSH

R0, (DRUGI)
R0

CALL

NILI

POP
R0
STORE R0, (REZ)
HALT

377

11

<<<< Izvoenje programa:


0

R0
R1

R2

FFF4

R7 tj. SP

0
pov.adr.
param.2
param.1

FFF0
FFF4
FFF8
FFFC
10000

param.2

GLAVNI MOVE

10000, SP

LOAD
PUSH

R0, (PRVI)
R0

LOAD
PUSH

R0, (DRUGI)
R0

CALL

NILI

POP
R0
STORE R0, (REZ)
HALT

378

12

<<<< Izvoenje programa:


0

R0
R1

R2

FFF4

R7 tj. SP

0
pov.adr.
param.2
param.1

FFF0
FFF4
FFF8
FFFC
10000

param.2

NILI

POP
POP
POP

R2
R0
R1

OR
XOR

R0, R1, R0
R0, -1, R0

PUSH R0
PUSH R2
RET

379

13

<<<< Izvoenje programa:


param.2

NILI

POP
POP
POP

R2
R0
R1

OR
XOR

R0, R1, R0
R0, -1, R0

R0
R1

pov.adr. R2
FFF8

R7 tj. SP

0
pov.adr.
param.2
param.1

FFF0
FFF4
FFF8
FFFC
10000

PUSH R0
PUSH R2
RET

380

14

<<<< Izvoenje programa:


param.2

NILI

POP
POP
POP

R2
R0
R1

OR
XOR

R0, R1, R0
R0, -1, R0

R0
R1

pov.adr. R2
FFFC

R7 tj. SP

0
pov.adr.
param.2
param.1

FFF0
FFF4
FFF8
FFFC
10000

PUSH R0
PUSH R2
RET

381

15

<<<< Izvoenje programa:


param.2

NILI

POP
POP
POP

R2
R0
R1

OR
XOR

R0, R1, R0
R0, -1, R0

param.1

R0
R1

pov.adr. R2
10000

R7 tj. SP

0
pov.adr.
param.2
param.1

FFF0
FFF4
FFF8
FFFC
10000

PUSH R0
PUSH R2
RET

382

16

<<<< Izvoenje programa:


rezult

NILI

POP
POP
POP

R2
R0
R1

OR
XOR

R0, R1, R0
R0, -1, R0

param.1

R0
R1

pov.adr. R2
10000

R7 tj. SP

0
pov.adr.
param.2
param.1

FFF0
FFF4
FFF8
FFFC
10000

PUSH R0
PUSH R2
RET

383

17

<<<< Izvoenje programa:


rezult

NILI

POP
POP
POP

R2
R0
R1

OR
XOR

R0, R1, R0
R0, -1, R0

param.1

R0
R1

pov.adr. R2
FFFC

R7 tj. SP

0
pov.adr.
param.2
rezult

FFF0
FFF4
FFF8
FFFC
10000

PUSH R0
PUSH R2
RET

384

18

<<<< Izvoenje programa:


rezult

NILI

POP
POP
POP

R2
R0
R1

OR
XOR

R0, R1, R0
R0, -1, R0

param.1

R0
R1

pov.adr. R2
FFF8

R7 tj. SP

0
pov.adr.
pov.adr.
rezult

FFF0
FFF4
FFF8
FFFC
10000

PUSH R0
PUSH R2
RET

385

19

<<<< Izvoenje programa:


rezult

NILI

POP
POP
POP

R2
R0
R1

OR
XOR

R0, R1, R0
R0, -1, R0

param.1

R0
R1

pov.adr. R2
FFFC

R7 tj. SP

0
pov.adr.
pov.adr.
rezult

FFF0
FFF4
FFF8
FFFC
10000

PUSH R0
PUSH R2
RET

386

20

<<<< Izvoenje programa:


rezult
param.1

R0
R1

pov.adr. R2

GLAVNI MOVE

10000, SP

LOAD
PUSH

R0, (PRVI)
R0

LOAD
PUSH

R0, (DRUGI)
R0

CALL

NILI

POP
R0
STORE R0, (REZ)
HALT

FFFC

R7 tj. SP

0
pov.adr.
pov.adr.
rezult

FFF0
FFF4
FFF8
FFFC
10000

387

21

<<<< Izvoenje programa:


rezult
param.1

R0
R1

pov.adr. R2

GLAVNI MOVE

10000, SP

LOAD
PUSH

R0, (PRVI)
R0

LOAD
PUSH

R0, (DRUGI)
R0

CALL

NILI

POP
R0
STORE R0, (REZ)
HALT

10000

R7 tj. SP

0
pov.adr.
pov.adr.
rezult

FFF0
FFF4
FFF8
FFFC
10000

388

22

<<<< Izvoenje programa:


rezult
- dohvaeni rezultat se koristi
- stog je u poetnom stanju

GLAVNI MOVE

pov.adr. R2

10000, SP

LOAD
PUSH

R0, (PRVI)
R0

LOAD
PUSH

R0, (DRUGI)
R0

CALL

NILI

POP
R0
STORE R0, (REZ)
HALT

param.1

R0
R1

10000

R7 tj. SP

ALI: registri R0, R1, R2


su promjenjeni !!!

0
pov.adr.
pov.adr.
rezult

FFF0
FFF4
FFF8
FFFC
10000

389

23

<<<< (kompletan listing s komentarima)

; glavni program
GLAVNI MOVE 10000, SP

;vano: inicijaliziraj SP !!!

; stavi vrijednost prvog parametra na stog


LOAD R0, (PRVI)
PUSH R0
; stavi vrijednost drugog parametra na stog
LOAD R0, (DRUGI)
PUSH R0
CALL

NILI

;poziv potprograma

; uzmi rezultat sa stoga i spremi ga


POP
R0
STORE R0, (REZ)
;spremanje rezultata
HALT
>>>>
390

24

<<<<

NILI

; potprogram
POP
R2
POP
R0
POP
R1
OR
XOR

R0, R1, R0
R0, -1, R0

PUSH R0
PUSH R2
RET

PRVI
DRUGI
REZ

NILI
; uzmi povratnu adresu sa stoga
; dohvat prvog parametra
; dohvat drugog parametra
; Izraunavanje
; rezultata.

; stavi rezultat na stog


; vrati povratnu adresu na stog

; podatci i mjesto za rezultat


DW 1234ABCD
DW 22445599
DW 0

391

25

Potprogrami - Prijenos stogom


Pokuajmo rijeiti prethodni zadatak tako
da se uvaju stanja registara koje
potprogram mijenja

Ve smo vidjeli da je najzgodnije registre


spremiti na stog

392

26

Potprogrami - Prijenos stogom


SP

0
0
0
0
0
0
0
0

FFE0
FFE4
FFE8
FFEC
FFF0
FFF4
FFF8
FFFC
10000

393

27

Potprogrami - Prijenos stogom

Izvodi se:
Glavni program stavlja dva
parametra na stog

SP

0
0
0
0
0
0
par.2
par.1

FFE0
FFE4
FFE8
FFEC
FFF0
FFF4
FFF8
FFFC
10000

394

28

Potprogrami - Prijenos stogom

Izvodi se:

Glavni program poziva


potprogram

SP

0
0
0
0
0
Pov.adr.
par.2
par.1

FFE0
FFE4
FFE8
FFEC
FFF0
FFF4
FFF8
FFFC
10000

395

29

Potprogrami - Prijenos stogom

Izvodi se:
Potprogram sprema registre
(koje e mijenjati) na stog

(npr. tri registra R0, R1, R2)

SP

0
0
R2
R1
R0
Pov.adr.
par.2
par.1

FFE0
FFE4
FFE8
FFEC
FFF0
FFF4
FFF8
FFFC
10000

396

30

Potprogrami - Prijenos stogom


SP

?
Kako dohvatiti parametre ?

0
0
R2
R1
R0
Pov.adr.
par.2
par.1

FFE0
FFE4
FFE8
FFEC
FFF0
FFF4
FFF8
FFFC
10000

397

31

Potprogrami - Prijenos stogom


SP
Da smo prije spremanja
registara dohvatili
parametre, onda bi unitili
registre prije nego ih
spremimo:

0
0
R2
R1
R0
Pov.adr.
par.2
par.1

FFE0
FFE4
FFE8
FFEC
FFF0
FFF4
FFF8
FFFC
10000

398

32

Potprogrami - Prijenos stogom


SP
Jedna mogunost (LOA!!!)
je da presloimo podatke na
stogu koritenjem fiksnih
memorijskih lokacija
(npr. tako da parametri dou
na vrh stoga)

0
0
R2
R1
R0
Pov.adr.
par.2
par.1

FFE0
FFE4
FFE8
FFEC
FFF0
FFF4
FFF8
FFFC
10000

399

33

Potprogrami - Prijenos stogom


SP
Rjeenje bi bilo kad ne bi
morali pristupati podatcima
na stogu samo pomou
PUSH i POP.
Kako moemo pristupiti
podatcima "ispod" vrha
stoga, bez pomicanja vrha
stoga?

0
0
R2
R1
R0
Pov.adr.
par.2
par.1

FFE0
FFE4
FFE8
FFEC
FFF0
FFF4
FFF8
FFFC
10000

400

34

Potprogrami - Prijenos stogom


SP
Rjeenje je
jednostavno:
Registarsko indirektno
adresiranje s odmakom,
pri emu kao adresni
registar koristimo SP

0
0
R2
R1
R0
Pov.adr.
par.2
par.1

FFE0
FFE4
FFE8
FFEC
FFF0
FFF4
FFF8
FFFC
10000

401

35

Potprogrami - Prijenos stogom


SP

Adrese se
zadaju ovako

Naredbama LOAD i STORE


moemo pristupati
podatcima "unutar" stoga.

(SP+0)
(SP+4)
(SP+8)
(SP+C)
(SP+10)
(SP+14)

0
0
R2
R1
R0
Pov.adr.
par.2
par.1

FFE0
FFE4
FFE8
FFEC
FFF0
FFF4
FFF8
FFFC
10000

402

36

Potprogrami - Prijenos stogom

Dok piemo potprogram,


tono znamo koliko on
parametara ima i koliko
registara mora spremiti na
stog.
Zato lako moemo
izraunati odmake
pojedinih parametara u
odnosu na SP (vrh stoga).

SP
(SP+0)
(SP+4)
(SP+8)
(SP+C)
(SP+10)
(SP+14)

0
0
R2
R1
R0
Pov.adr.
par.2
par.1

FFE0
FFE4
FFE8
FFEC
FFF0
FFF4
FFF8
FFFC
10000

403

37

Potprogrami - Prijenos stogom


Promatramo stanje na stogu za potprogram koji bi spremao
registre na stog.
Zadnji problem je povratna
vrijednost.

Neka je upravo zavreno


izraunavanje rezultata
potprograma i neka je
rezultat npr. u registru R0.
elimo se vratiti iz
potprograma:

SP
(SP+0)
(SP+4)
(SP+8)
(SP+C)
(SP+10)
(SP+14)

0
0
R2
R1
R0
Pov.adr.
par.2
par.1

FFE0
FFE4
FFE8
FFEC
FFF0
FFF4
FFF8
FFFC
10000

404

38

Potprogrami - Prijenos stogom


Promatramo stanje na stogu za potprogram koji bi spremao
registre na stog.
Izvodi se:
Obnavljaju se registri
R0, R1 i R2.

Povratak se lako
ostavaruje sa RET
Ali, obnavljanjem R0
gubi se rezultat !!!

SP

0
0
0
0
0
Pov.adr.
par.2
par.1

FFE0
FFE4
FFE8
FFEC
FFF0
FFF4
FFF8
FFFC
10000

405

39

Potprogrami - Prijenos stogom


Rjeenje koje se koristi u praksi:
Za povratak rezultata iz potprograma koristi se
prijenos registrom, a ne stogom.
Ovo rjeenje je efikasno i jednostavno. Ogranienje je da
se moe vratiti samo jedan rezultat, ali je u praksi to obino
dovoljno.
Obino se odabire jedan registar koji svi potprogrami
koriste za povratak vrijednosti, a na mjestu pozivanja se
zna da u tom registru ne smije biti koristan podatak.

406

40

Potprogrami - Prijenos stogom


Napisati potprogram koji izraunava logiku operaciju NILI.
Parametri se prenose stogom, a rezultat se vraa registrom R0.
Glavni program iz memorije uitava dva podatka za koje rauna
NILI (pomou potprograma) i rezultat sprema natrag u
memoriju.
Potprogram mora uvati vrijednosti svih registara koje mijenja.
Rjeenje:
U ovom rjeenju potprogram mijenja registre R1 i R2 i sprema
ih na stog (R0 se takoer mijenja, ali preko njega se ionako vraa
povratna vrijednost)
Parametrima se pristupa registarskim indirektnim adresiranjem
s odmakom (koritenjem SP-a kao adresnog registra)
>>>>
407

41

<<<< Izvoenje programa:


R1

R0
R1

R2

R2

R7 tj. SP

0
0
0
0
0
0

FFE8
FFEC
FFF0
FFF4
FFF8
FFFC
10000

GLAVNI MOVE

10000, SP

LOAD
PUSH

R0, (PRVI)
R0

LOAD
PUSH

R0, (DRUGI)
R0

CALL

NILI

STORE R0, (REZ)


ADD
HALT

SP, 8, SP

408

42

<<<< Izvoenje programa:


R1

R0
R1

R2

R2

10000

R7 tj. SP

0
0
0
0
0
0

FFE8
FFEC
FFF0
FFF4
FFF8
FFFC
10000

GLAVNI MOVE

10000, SP

LOAD
PUSH

R0, (PRVI)
R0

LOAD
PUSH

R0, (DRUGI)
R0

CALL

NILI

STORE R0, (REZ)


ADD
HALT

SP, 8, SP

409

43

<<<< Izvoenje programa:


R1

R0
R1

R2

R2

10000

R7 tj. SP

0
0
0
0
0
0

FFE8
FFEC
FFF0
FFF4
FFF8
FFFC
10000

param.1

GLAVNI MOVE

10000, SP

LOAD
PUSH

R0, (PRVI)
R0

LOAD
PUSH

R0, (DRUGI)
R0

CALL

NILI

STORE R0, (REZ)


ADD
HALT

SP, 8, SP

410

44

<<<< Izvoenje programa:


R1

R0
R1

R2

R2

FFFC

R7 tj. SP

0
0
0
0
0
param.1

FFE8
FFEC
FFF0
FFF4
FFF8
FFFC
10000

param.1

GLAVNI MOVE

10000, SP

LOAD
PUSH

R0, (PRVI)
R0

LOAD
PUSH

R0, (DRUGI)
R0

CALL

NILI

STORE R0, (REZ)


ADD
HALT

SP, 8, SP

411

45

<<<< Izvoenje programa:


R1

R0
R1

R2

R2

FFFC

R7 tj. SP

0
0
0
0
0
param.1

FFE8
FFEC
FFF0
FFF4
FFF8
FFFC
10000

param.2

GLAVNI MOVE

10000, SP

LOAD
PUSH

R0, (PRVI)
R0

LOAD
PUSH

R0, (DRUGI)
R0

CALL

NILI

STORE R0, (REZ)


ADD
HALT

SP, 8, SP

412

46

<<<< Izvoenje programa:


R1

R0
R1

R2

R2

FFF8

R7 tj. SP

0
0
0
0
param.2
param.1

FFE8
FFEC
FFF0
FFF4
FFF8
FFFC
10000

param.2

GLAVNI MOVE

10000, SP

LOAD
PUSH

R0, (PRVI)
R0

LOAD
PUSH

R0, (DRUGI)
R0

CALL

NILI

STORE R0, (REZ)


ADD
HALT

SP, 8, SP

413

47

<<<< Izvoenje programa:


R1

R0
R1

R2

R2

FFF4

R7 tj. SP

0
0
0
pov.adr.
param.2
param.1

FFE8
FFEC
FFF0
FFF4
FFF8
FFFC
10000

param.2

GLAVNI MOVE

10000, SP

LOAD
PUSH

R0, (PRVI)
R0

LOAD
PUSH

R0, (DRUGI)
R0

CALL

NILI

STORE R0, (REZ)


ADD
HALT

SP, 8, SP

414

48

<<<< Izvoenje programa:


R1

R0
R1

R2

R2

FFF4

R7 tj. SP

0
0
0
pov.adr.
param.2
param.1

FFE8
FFEC
FFF0
FFF4
FFF8
FFFC
10000

param.2

NILI

PUSH
PUSH

R1
R2

LOAD
LOAD

R1, (SP+0C)
R2, (SP+10)

OR
XOR

R1, R2, R0
R0, -1, R0

POP R2
POP R1
RET

415

49

<<<< Izvoenje programa:


R1

R0
R1

R2

R2

FFF0

R7 tj. SP

0
0
R1
pov.adr.
param.2
param.1

FFE8
FFEC
FFF0
FFF4
FFF8
FFFC
10000

param.2

NILI

PUSH
PUSH

R1
R2

LOAD
LOAD

R1, (SP+0C)
R2, (SP+10)

OR
XOR

R1, R2, R0
R0, -1, R0

POP R2
POP R1
RET

416

50

<<<< Izvoenje programa:


R1

R0
R1

R2

R2

FFEC

R7 tj. SP

0
R2
R1
pov.adr.
param.2
param.1

FFE8
FFEC
FFF0
FFF4
FFF8
FFFC
10000

param.2

NILI

PUSH
PUSH

R1
R2

LOAD
LOAD

R1, (SP+0C)
R2, (SP+10)

OR
XOR

R1, R2, R0
R0, -1, R0

POP R2
POP R1
RET

417

51

<<<< Izvoenje programa:


param.2

R0
R1

R2

R2

FFEC

R7 tj. SP

0
R2
R1
pov.adr.
param.2
param.1

FFE8
FFEC
FFF0
FFF4
FFF8
FFFC
10000

param.2

NILI

PUSH
PUSH

R1
R2

LOAD
LOAD

R1, (SP+0C)
R2, (SP+10)

OR
XOR

R1, R2, R0
R0, -1, R0

POP R2
POP R1
RET

(SP+0C)

418

52

<<<< Izvoenje programa:


param.2

R0
R1

param.1

R2

FFEC

R7 tj. SP

0
R2
R1
pov.adr.
param.2
param.1

FFE8
FFEC
FFF0
FFF4
FFF8
FFFC
10000

param.2

NILI

PUSH
PUSH

R1
R2

LOAD
LOAD

R1, (SP+0C)
R2, (SP+10)

OR
XOR

R1, R2, R0
R0, -1, R0

POP R2
POP R1
RET

(SP+10)

419

53

<<<< Izvoenje programa:


param.2

R0
R1

param.1

R2

FFEC

R7 tj. SP

0
R2
R1
pov.adr.
param.2
param.1

FFE8
FFEC
FFF0
FFF4
FFF8
FFFC
10000

rezult

NILI

PUSH
PUSH

R1
R2

LOAD
LOAD

R1, (SP+0C)
R2, (SP+10)

OR
XOR

R1, R2, R0
R0, -1, R0

POP R2
POP R1
RET

420

54

<<<< Izvoenje programa:


param.2

R0
R1

R2

R2

FFF0

R7 tj. SP

0
R2
R1
pov.adr.
param.2
param.1

FFE8
FFEC
FFF0
FFF4
FFF8
FFFC
10000

rezult

NILI

PUSH
PUSH

R1
R2

LOAD
LOAD

R1, (SP+0C)
R2, (SP+10)

OR
XOR

R1, R2, R0
R0, -1, R0

POP R2
POP R1
RET

421

55

<<<< Izvoenje programa:


R1

R0
R1

R2

R2

FFF4

R7 tj. SP

0
R2
R1
pov.adr.
param.2
param.1

FFE8
FFEC
FFF0
FFF4
FFF8
FFFC
10000

rezult

NILI

PUSH
PUSH

R1
R2

LOAD
LOAD

R1, (SP+0C)
R2, (SP+10)

OR
XOR

R1, R2, R0
R0, -1, R0

POP R2
POP R1
RET

422

56

<<<< Izvoenje programa:


R1

R0
R1

R2

R2

FFF8

R7 tj. SP

0
R2
R1
pov.adr.
param.2
param.1

FFE8
FFEC
FFF0
FFF4
FFF8
FFFC
10000

rezult

NILI

PUSH
PUSH

R1
R2

LOAD
LOAD

R1, (SP+0C)
R2, (SP+10)

OR
XOR

R1, R2, R0
R0, -1, R0

POP R2
POP R1
RET

423

57

<<<< Izvoenje programa:


R1

R0
R1

R2

R2

FFF8

R7 tj. SP

0
R2
R1
pov.adr.
param.2
param.1

FFE8
FFEC
FFF0
FFF4
FFF8
FFFC
10000

rezult

GLAVNI MOVE

10000, SP

LOAD
PUSH

R0, (PRVI)
R0

LOAD
PUSH

R0, (DRUGI)
R0

CALL

NILI

STORE R0, (REZ)


ADD
HALT

SP, 8, SP

424

58

<<<< Izvoenje programa:


R1

R0
R1

R2

R2

FFF8

R7 tj. SP

0
R2
R1
pov.adr.
param.2
param.1

FFE8
FFEC
FFF0
FFF4
FFF8
FFFC
10000

rezult

GLAVNI MOVE

10000, SP

LOAD
PUSH

R0, (PRVI)
R0

LOAD
PUSH

R0, (DRUGI)
R0

CALL

NILI

STORE R0, (REZ)


ADD

SP, 8, SP

HALT

rezultat se sprema
izravno iz R0

425

59

<<<< Izvoenje programa:


R1

R0
R1

R2

R2

10000

R7 tj. SP

0
R2
R1
pov.adr.
param.2
param.1

FFE8
FFEC
FFF0
FFF4
FFF8
FFFC
10000

rezult

GLAVNI MOVE

10000, SP

LOAD
PUSH

R0, (PRVI)
R0

LOAD
PUSH

R0, (DRUGI)
R0

CALL

NILI

STORE R0, (REZ)


ADD

SP, 8, SP

HALT
glavni program uklanja
parametre sa stoga

426

60

Komentari:

R1

R0
R1

R2

R2

10000

R7 tj. SP

0
R2
R1
pov.adr.
param.2
param.1

FFE8
FFEC
FFF0
FFF4
FFF8
FFFC
10000

rezult

Za razliku od prethodnih primjera,


gdje je potprogram pomou naredaba
POP "potroio" svoje parametre, ovdje
parametre uklanja pozivatelj.

Ovo je "ie" rjeenje, jer je


loginije da je parametre sa stoga
duan ukloniti onaj tko ih je i stavio
na stog.
Umjesto niza naredaba POP,
parametri se uklanjaju naredbom:
ADD

SP, 8, SP

to je ne samo bre, nego dodatno uva


vrijednosti svih registara.

427

61

<<<<

(kompletan listing s komentarima)

; glavni program
GLAVNI MOVE 10000, SP

;vano: inicijaliziraj SP !!!

LOAD
PUSH

R0, (PRVI)
R0

; stavi vrijednost
; prvog parametra na stog

LOAD
PUSH

R0, (DRUGI)
R0

; stavi vrijednost
; drugog parametra na stog

CALL

NILI

; poziv potprograma

STORE R0, (REZ)

; spremi rezultat iz R0

ADD

; ukloni parametre sa stoga

SP, 8, SP

HALT

PRVI
DRUGI
REZ

; podatci i mjesto za rezultat


DW 1234ABCD
DW 22445599
DW 0

>>>>
428

62

<<<<

NILI

; potprogram NILI
PUSH R1
; Spremanje
PUSH R2
; registara.
LOAD
LOAD

R1, (SP+0C)
R2, (SP+10)

OR
XOR

R1, R2, R0
R0, -1, R0

POP R2
POP R1

; itanje parametara
; u registre R1 i R2
; Izraunavanje
; rezultata.

; Obnovi
; registre.

RET
>>>>

429

63

Komentari:
Nain rada s parametrima i nain vraanja rezultata pokazan u ovom
primjeru vrlo je slian stvarnim potprogramima dobivenim prevoenjem viih
programskih jezika u asembler.
Razlog za ovakvu organizaciju je njena praktinost i efikasnost te openitost
koja omoguuje koritenje rekurzivnih i nerekurzivnih potprograma uz
uvanje stanja svih registara.
Podatci na stogu su uniformno organizirani za svaki potprogram i takav
niz podataka za jedan potprogram naziva se okvir stoga ili krae okvir
(frame, stack frame, activation record). Svaki potprogram ima svoj okvir.

OKVIR

R2
R1
pov.adr.
param.2
param.1

spremljeni registri
povratna adresa
parametri
430

64

<<<<

Do sada nismo vidjeli kako u asembleru ostvariti lokalne


varijable
Lokalne varijable imaju sljedea svojstva:

za svaki poziv potprograma postoje vlastite lokalne varijable


vidljive su samo unutar potprograma u kojem su definirane
stvaraju se prilikom poziva potprograma
nestaju prilikom povratka iz potprograma

Vidimo da su lokalne varijable po svemu sline parametrima


potprograma. Jedina je razlika u poetnoj vrijednosti koja se
za parametar definira od strane pozivatelja potprograma
Dakle, prirodno je rjeenje da se i lokalne varijable uvaju na
stogu, ili tonije u okviru stoga
>>>>431

65

<<<<

Potpunija verzija stogovnog okvira ukljuuje i lokalne varijable


Lokalne varijable se stavljaju na stog nakon ulaska u
potprogram, a mogu se staviti "ispod" ili "iznad" spremljenih
registara. Ovdje je odabrano da se stave "iznad" njih:

OKVIR

y
x
R2
R1
pov.adr.
param.2
param.1

lokalne varijable
spremljeni registri
povratna adresa
parametri

Vana napomena:
Prevoditelj u stvarnosti obino pokuava staviti lokalne varijable u
registre, a tek kad se oni napune stavlja lokalne varijable na stog
432
66

Rekapitulacija okvira stoga


Okvir stoga sadri:

parametre
povratnu adresu
spremljene registre
OKVIR
lokalne varijable

Nain rada s okvirom:


Glavni program:

stavlja parametre
stavlja povratnu adresu (CALL)
uklanja parametre

y
x
R2
R1
pov.adr.
param.2
param.1

lokalne varijable
spremljeni registri
povratna adresa
parametri

Potprogram:

sprema i obnavlja registre


stvara i uklanja lokalne varijable
uklanja povratnu adresu (RET)

433

67

Rekapitulacija rada s okvirom stoga:


Pozivatelj:

Potprogram:

Okvir:

SP

434

68

Rekapitulacija rada s okvirom stoga:


Pozivatelj:

Potprogram:

Okvir:

Stavi parametre na stog

SP
param.n

435

69

Rekapitulacija rada s okvirom stoga:


Pozivatelj:

Potprogram:

Okvir:

Stavi parametre na stog

Pozovi potprogram

SP
pov.adr.
param.n

436

70

Rekapitulacija rada s okvirom stoga:


Pozivatelj:

Potprogram:

Okvir:

Stavi parametre na stog

Pozovi potprogram
Spremi registre
SP

R2
R1
pov.adr.
param.n

437

71

Rekapitulacija rada s okvirom stoga:


Pozivatelj:

Potprogram:

Okvir:

Stavi parametre na stog

Pozovi potprogram
Spremi registre
Stvori lokalne varijable

SP

y
x
R2
R1
pov.adr.
param.n

438

72

Rekapitulacija rada s okvirom stoga:


Pozivatelj:

Potprogram:

Okvir:

Stavi parametre na stog

Pozovi potprogram
Spremi registre
Stvori lokalne varijable

SP

Izvoenje (okvir se ne mijenja)


(ali se mogu mijenjati podatci u okviru,
npr. parametri i lokalne varijable)

y
x
R2
R1
pov.adr.
param.n

439

73

Rekapitulacija rada s okvirom stoga:


Pozivatelj:

Potprogram:

Okvir:

Stavi parametre na stog

Pozovi potprogram
Spremi registre
Stvori lokalne varijable

SP

Izvoenje (okvir se ne mijenja)

R2
R1
pov.adr.
param.n

Povratak: ukloni lokalne

440

74

Rekapitulacija rada s okvirom stoga:


Pozivatelj:

Potprogram:

Okvir:

Stavi parametre na stog

Pozovi potprogram
Spremi registre
Stvori lokalne varijable

SP

Izvoenje (okvir se ne mijenja)

pov.adr.
param.n

Povratak: ukloni lokalne


obnovi registre

441

75

Rekapitulacija rada s okvirom stoga:


Pozivatelj:

Potprogram:

Okvir:

Stavi parametre na stog

Pozovi potprogram (CALL)


Spremi registre
Stvori lokalne varijable

SP

Izvoenje (okvir se ne mijenja)

param.n

Povratak: ukloni lokalne


obnovi registre
vrati se (RET)

442

76

Rekapitulacija rada s okvirom stoga:


Pozivatelj:

Potprogram:

Okvir:

Stavi parametre na stog

Pozovi potprogram (CALL)


Spremi registre
Stvori lokalne varijable

SP

Izvoenje (okvir se ne mijenja)


Povratak: ukloni lokalne
obnovi registre
vrati se (RET)
Ukloni parametre
443

77

Rekurzivni potprogrami

444

78

Potprogrami - Prijenos stogom


Rekurzivni potprogrami su oni koji mogu pozvati sami sebe
(izravno, ili neizravno - preko drugih potprograma)
Budui da imamo viestruki poziv istog potprograma, to je
isto kao da je rekurzivni potprogram istovremeno "vie puta
aktiviran"
Zato se parametri ne mogu prenositi registrima i fiksnim
lokacijama (npr. prvi poziv bi napunio vrijednosti u
parametre, a ve bi drugi poziv prepisao preko njih svoje
vrijednosti, ime bi prve vrijednosti za prvi poziv bile
izgubljene)
Zato rekurzivni potprogrami koriste prijenos stogom i okvir
stoga
Uoite da povratna vrijednost nije problem i za njeno vraanje
445
79
se koristi prijenos registrom

Potprogrami - Rekurzija
Treba napisati rekurzivni potprogram za raunanje faktorijela:

fakt(1) = 1
fakt(n) = fakt(n-1)*n

za n= 2, 3, 4, ...

Parametar se prenosi stogom, a rezultat se vraa registrom R0.


Rjeenje:
Pokaimo prvo kako e izgledati okvir stoga:

(SP+00) R2
(SP+04) R1
(SP+08) pov.adr.
(SP+0C) param. n

spremljeni registri
povratna adresa
parametar

OKVIR
446

80

<<<<

; potprogram fakt(n)

FAKT

PUSH
PUSH

MNOZI

VRATISE

R1
R2

Spremi registre

LOAD R0, (SP+0C)


CMP
R0, 1
JR_EQ VRATISE

Ako je n jednak 1, onda vrati 1 u R0

SUB
PUSH
CALL
ADD

R0, 1, R0
R0
FAKT
SP, 4, SP

Pozovi fakt(n-1) ovako:


- izraunaj n-1 i stavi ga na stog
- pozovi fakt(n-1), rezultat e biti u R0
- ukloni parametar (tj. n-1) sa stoga

LOAD
MOVE
ADD
SUB
JR_NZ

R1, (SP+0C)
0, R2
R0, R2, R2
R1, 1, R1
MNOZI

Broja R1=n; poetni umnoak R2=0

MOVE

R2, R0

Umnoak iz R2 treba vratiti preko R0

POP
POP
RET

R2
R1

Mnoenje uzastopnim pribrajanjem:


R1 je broja, umnoku R2 pribraja
se R0 u kojem je fakt(n-1)

Obnovi registre i vrati se

>>>>
447

81

<<<<

Pokaimo jo samo kako bi mogao izgledati glavni program koji


poziva fakt(3) i sprema rezultat na memorijsku lokaciju REZULT.
GLAVNI

MOVE 10000, SP
MOVE 3, R0
PUSH R0
CALL FAKT
STORE R0, (REZULT)
ADD SP, 4, SP
HALT

REZULT

DW

0
448

82

Potprogrami - Rekurzija
Treba napisati rekurzivni potprogram za raunanje niza
Fibonaccijevih brojeva:

Fib(1) = 1
Fib(2) = 1
Fib(n) = Fib(n-1) + Fib(n-2)

za n= 3,4, ...

Parametar se prenosi stogom, a rezultat se vraa registrom R0.


Glavni program treba izraunati Fib(8).

Rjeenje:
Radi lakeg objanjenja, pokaimo prvo kako bi rjeenje moglo
izgledati u programskom jeziku C
>>>>
449

83

<<<<

int fib ( int n ) {


int x, y;

// lokalne varijable za meurezultate

if ( n == 1 || n == 2 )
return ( 1 );
x = fib ( n-1 );
y = fib ( n-2 );
return ( x+y );

// Fib(1) i Fib(2) = 1

// Fib(n) = Fib(n-1) + Fib(n-2)

}
main () {
int rez;
rez = fib ( 8 );
}
>>>>
450

84

<<<<

Rjeenje u C-u se moglo napisati i neto krae:


int fib ( int n ) {
if ( n == 1 || n == 2 )
return ( 1 );
return ( fib ( n-1 ) + fib ( n-2 ) )
}

Ovdje nema lokalnih varijabli x i y. Meutim, treba voditi rauna da


rezultat od fib(n-1) mora biti negdje pohranjen dok se izraunava fib(n-2).
Zato e C-prevodilac stvoriti asemblerski program koji je sliniji verziji s
prethodnog slajda, iako je to za programera u C-u nevidljivo.
>>>>
451

85

Mogui prijevod C-programa u asembler:


; glavni program
MAIN

LOAD

SP, 10000

MOVE
PUSH

8, R0
R0

CALL

FIB

ADD
STORE

SP, 4, SP
R0, (REZ)

; inicijalizacija stoga

; Stavi eljenu vrijednost


; parametra (n=8) na stog.
; poziv potprograma

; ukloni parametar sa stoga


; spremi rezultat iz R0

HALT

REZ

DW

; mjesto za rezultat

>>>>
452

86

<<<<
; potprogram FIB
FIB

PUSH
PUSH

R1
R2

; Spremanje
; registara na stog

; Stvaranje lokalnih varijabli x i y


SUB
SP, 8, SP
; if( n==1

||

n==2 ) return (1);

MOVE

1, R0 ; Pripremi rez. za sluaj povratka

LOAD
CMP
JR_EQ

R1, (SP+14) ; dohvati parametar n


R1, 1
; je li n==1 ?
VRATI_SE
; Da: idi na dio za povratak

CMP
JR_EQ

R1, 2
VRATI_SE

; Ne: ispitaj je li n==2 ?


; Da: idi na dio za povratak
>>>>
453

87

<<<<

; n nije ni 1 ni 2 - nastavak izvoenja

; x = fib(n-1)
LOAD
SUB
PUSH

R1, (SP+14) ; dohvati parametar n


R1, 1, R1
; Oduzmi n-1 i stavi na stog
R1
; za prvi rekurzivni poziv.

CALL
ADD
STORE

FIB
SP, 4, SP
R0, (SP+4)

; pozovi fib(n-1)
; ukloni n-1 sa stoga
; spremi rezultat u x

; y = fib(n-2)
LOAD
SUB
PUSH

R1, (SP+14) ; dohvati parametar n


R1, 2, R1
; Oduzmi n-2 i stavi na stog
R1
; za drugi rekurzivni poziv.

CALL
ADD
STORE

FIB
SP, 4, SP
R0, (SP+0)

; pozovi fib(n-2)
; ukloni n-2 sa stoga
; spremi rezultat u y
>>>>
454

88

<<<<
; return ( x + y )
LOAD
LOAD
ADD

VRATI_SE ADD
POP
POP
RET

R1, (SP+4)
R2, (SP+0)
R1, R2, R0

; dohvati x
; dohvati y
; izraunaj povratnu vrijednost

SP, 8, SP

; ukloni x i y sa stoga

R2
R1

; Obnovi sadraje
; spremljenih registara.
; povratak iz FIB

455

89

Pokaimo ponaanje okvira na stogu


ako je u glavnom programu pozvano
Fib(4).
Neemo pratiti pojedine podatke u
okvirima na stogu ve promatramo
pojedine okvire kao cjeline.
okviri na stogu

456

90

main
izvodi se main

okviri na stogu

457

91

main
main

fib(4)

main poziva fib(4)

fib(4)
okviri na stogu

458

92

main
main
main

fib(4)
fib(4)

fib(3)

fib(4) poziva fib(3)

fib(3)
fib(4)
okviri na stogu

459

93

main
main
main
main

fib(4)
fib(4)
fib(4)

fib(3)
fib(3)

fib(3) poziva fib(2)


fib(2)

fib(2)
fib(3)
fib(4)
okviri na stogu

460

94

main
main
main
main
main

fib(4)
fib(4)
fib(4)
fib(4)

fib(3)
fib(3)
fib(3)

fib(2) vraa 1
1

fib(2)
fib(2)=1

fib(3)
fib(4)
okviri na stogu

461

95

main
main
main
main
main
main

fib(4)
fib(4)
fib(4)
fib(4)
fib(4)

fib(3)
fib(3)
fib(3)
fib(3)

fib(3) poziva fib(1)


1

fib(2)
fib(2)=1
fib(1)

fib(1)
fib(3)
fib(4)
okviri na stogu

462

96

main
main
main
main
main
main
main

fib(4)
fib(4)
fib(4)
fib(4)
fib(4)
fib(4)

fib(3)
fib(3)
fib(3)
fib(3)
fib(3)

fib(1) vraa 1
1
1

fib(2)
fib(2)=1
fib(1)
fib(1)=1

fib(3)
fib(4)
okviri na stogu

463

97

main
main
main
main
main
main
main
main

fib(4)
fib(4)
fib(4)
fib(4)
fib(4)
fib(4)
fib(4)

fib(3)
fib(3)
fib(2)
fib(3) 1 fib(2)=1
fib(3)
fib(1)
fib(3) 1 fib(1)=1
fib(3)=1+1

fib(3) vraa fib(2)+fib(1)

fib(4)
okviri na stogu

464

98

main
main
main
main
main
main
main
main
main

fib(4)
fib(4)
fib(4)
fib(4)
fib(4)
fib(4)
fib(4)
fib(4)

fib(3)
fib(3)
fib(2)
fib(3) 1 fib(2)=1
fib(3)
fib(1)
fib(3) 1 fib(1)=1
fib(3)=1+1
fib(2)

fib(4) poziva fib(2)

fib(2)
fib(4)
okviri na stogu

465

99

main
main
main
main
main
main
main
main
main
main

fib(4)
fib(4)
fib(4)
fib(4)
fib(4)
fib(4)
fib(4)
fib(4)
fib(4)

2
1

fib(3)
fib(3)
fib(2)
fib(3) 1 fib(2)=1
fib(3)
fib(1)
fib(3) 1 fib(1)=1
fib(3)=1+1
fib(2)
fib(2)=1

fib(2) vraa 1

fib(4)
okviri na stogu

466

100

main
main
main
main
main
main
main
main
main
main
main
main

fib(4)
fib(4)
fib(3)
fib(4)
fib(3)
fib(2)
fib(4)
fib(3) 1 fib(2)=1
fib(4)
fib(3)
fib(1)
fib(4)
fib(3) 1 fib(1)=1
fib(4) 2 fib(3)=1+1
fib(4)
fib(2)
fib(4) 1 fib(2)=1
fib(4)=2+1

fib(4) vraa fib(3)+fib(2)

okviri na stogu

467

101

main
main
main
main
main
main
main
main
main
main
main
main

fib(4)
fib(4)
fib(3)
fib(4)
fib(3)
fib(2)
fib(4)
fib(3) 1 fib(2)=1
fib(4)
fib(3)
fib(1)
fib(4)
fib(3) 1 fib(1)=1
fib(4) 2 fib(3)=1+1
fib(4)
fib(2)
fib(4) 1 fib(2)=1
fib(4)=2+1

nastavlja se izvoditi main

okviri na stogu

468

102

Makronaredbe

469

103

Makronaredbe
Makronaredbe imaju istu namjenu kao i potprogrami

Razlika je u nainu njihove izvedbe


Potprogrami su podrani od strane procesora, pomou
naredaba CALL i RET kojima se obavljaju poziv i
povratak iz potprograma
Makronaredbe su podrane od strane asemblerskog
prevoditelja koji ih prevodi u obine naredbe
procesora

Napomena: u ATLAS-u nije mogue koristiti makronaredbe

470

104

Makronaredbe - definicija
Ime makronaredbe
(pie se kao obina labela)

IME_MAKRONAREDBE

Oznaka poetka

MACRO
ADD R0, R1, R2
...
STORE R5, (20)
ENDMACRO

Tijelo
makronaredbe

Oznaka kraja

471

105

Makronaredbe - Primjer
Napisati makronaredbu koja izraunava logiku operaciju NILI
izmeu sadraja registara R0 i R1 i vraa rezultat u registru R2.
Napisati i glavni program koji e pozvati makronaredbu za dva
podatka iz memorije i rezultat takoer upisati u memoriju.
Rjeenje:
; DEFINICIJA MAKRONAREDBE

NILI

MACRO
OR
R0, R1, R2
XOR R2, -1, R2
ENDMACRO
>>>>
472

106

;;;;;; GLAVNI PROGRAM


LOAD
LOAD

R0, (PRVI) ; DOHVATI PODATKE


R1, (DRUGI) ; U R0 i R1

NILI

; POZOVI MAKRONAREDBU

STORE
HALT
;;;;;;
PRVI
DRUGI
REZ

R2, (REZ)

; SPREMI REZULTAT

PODATCI I MJESTO ZA REZULTAT


DW 81282C34
DW 29A82855
DW 0

Napomena: Poziv se ostvaruje navoenjem imena makronaredbe.


Poziv nije naredba procesora, ve je sliniji pseudonaredbi
asemblerskog prevoditelja.
473

107

Makronaredbe - Nain prevoenja


Asembleri koji podravaju makronaredbe moraju biti
troprolazni ili etveroprolazni i nazivaju se
makroasemblerima
U troprolaznom asembleru se svaka definicija
makronaredbe mora nalaziti ISPRED njenog
pozivanja
U etveroprolaznom asembleru se definicija
makronaredbe smije nalaziti IZA njenog pozivanja
Objasnimo kako rade ove dvije vrste asemblera . . .

474

108

Makronaredbe - Troprolazni asembler


Prvi prolaz:
Asembler ita redak po redak datoteke:
Ako naie na definiciju makronaredbe, onda u tablici
makronaredbi zapamti njeno ime i tijelo (slino kao to
dvoprolazni asembler nailaskom na labelu u tablici labela
pamti njeno ime i vrijednost)
Ako naie na poziv makronaredbe, zamjenjuje ga njenim
tijelom koje je zapameno u tablici (ovo je uvijek mogue
napraviti zbog obaveznog redoslijeda u kojem definicija
uvijek prethodi pozivu makronaredbe)
Prevoditelj ne mijenja ostale retke mnemonikog programa
Na kraju prvog prolaska, mnemonika datoteka vie nema ni
definicija makronaredaba ni poziva makronaredaba, ve sadri
samo obine naredbe procesora i pseudonaredbe

>>>>
109
475

Makronaredbe - Troprolazni asembler


<<<<
Drugi i trei prolaz:
Budui da je rezultat prvog prolaska obini mnemoniki program,
drugi i trei prolaz u potpunosti odgovaraju radu obinog
dvoprolaznog asemblera:
Drugi prolaz: ekvivalentan prvom prolasku dvoprolaznog
asemblera
Trei prolaz: ekvivalentan drugom prolasku dvoprolaznog
asemblera

>>>>

476

110

Makronaredbe - Troprolazni asembler


<<<< Kako izgleda prevoenje prethodnog primjera?
prvi prolaz

NILI

MACRO
OR R0, R1, R2
XOR R2, -1, R2
ENDMACRO

GLAVNI LOAD
LOAD

R0,(PRVI)
R1,(DRUGI)

NILI
STORE R2,(REZ)
HALT
originalni program s
makronaredbama i
njihovim pozivima

GLAVNI LOAD
LOAD

R0,(PRVI)
R1,(DRUGI)

OR R0, R1, R2
XOR R2, -1, R2
STORE R2,(REZ)
HALT
rezultat prvog prolaza:
obini mnemoniki
program
477
111

Makronaredbe - etveroprolazni asembler


etveroprolazni asembler dozvoljava da poziv makronaredbe prethodi
njenoj definiciji. Zato je potreban dodatni prolaz (kao to je u
simbolikom dvoprolaznom asembleru potreban dodatni prolaz zbog
labela koje se koriste prije nego to su definirane)

Prvi prolaz:
Asembler ita redak po redak datoteke:
Ako naie na definciju makronaredbe, onda u tablici
makronaredbi zapamti njeno ime i tijelo (slino kao to
dvoprolazni asembler nailaskom na labelu u tablici labela pamti
njeno ime i vrijednost)
Prevoditelj ne mijenja ostale retke mnemonikog programa
Na kraju prvog prolaska, mnemonika datoteka vie nema
definicija makronaredaba, ali sadri pozive makronaredaba.
112
>>>>
478

Makronaredbe - etveroprolazni asembler


<<<<
Drugi prolaz:
Drugi prolaz zamijenjuje sve pozive makronaredba njihovim tijelima
to daje obini mnemoniki program

Trei i etvrti prolaz:


Trei i etvrti prolaz u potpunosti odgovaraju prvom i drugom
prolazu obinog dvoprolaznog asemblera (odnosno odgovaraju
radu drugog i treeg prolaza troprolaznog asemblera)

>>>>

479

113

Makronaredbe - Parametri
Jedna od mogunosti koju makroasembleri obino
nude je i koritenje parametara makronaredaba

Parametri se obino navode kao lista imena iza

MACRO

Unutar tijela se parametri koriste na bilo kojim


mjestima u naredbama

Kod poziva makronaredbe programer zadaje


argumente, tj. navodi npr. registre, adrese i sl. Ovi
argumenti zamjenjuju parametre prilikom proirivanja
makronaredbe.
Ovisno o mjestima koritenja parametara, programeru
je pri pozivanju ograniena njihova upotreba

480

114

Makronaredbe - Parametri
Primjer:
Napiite makronaredbu koja e izraunati logiku operaciju NILI.
Ulazni podatci i rezultat mogu biti smjeteni na bilo kojim
memorijskim lokacijama koje se zadaju kao parametri
makronaredbe.
Napiite glavni program koji e izraunati NILI izmeu podataka s
lokacija PRVI i DRUGI, a rezultat e spremiti na REZULT.
Rjeenje:
na sljedeem slajdu
>>>>
481

115

<<<<

NILI

; DEFINICIJA MAKRONAREDBE
MACRO P1, P2, REZ
LOAD R0, (P1)
LOAD R1, (P2)
OR
R0, R1, R2
XOR
R2, -1, R2
STORE R2, (REZ)
ENDMACRO

; GLAVNI PROGRAM
NILI PRVI, DRUGI, REZULT
HALT

;;;; POZIV

; PODATCI I MJESTO ZA REZULTAT


PRVI
DW 81282C34
DRUGI
DW 29A82855
REZULT DW 0

>>>>

482

116

<<<<
Nakon prvog prolaza prevoenja, glavni program izgleda ovako:

LOAD
LOAD
OR
XOR
STORE

R0,
R1,
R0,
R2,
R2,

(PRVI)
(DRUGI)
R1, R2
-1, R2
(REZULT)

NILI PRVI,DRUGI,REZULT

HALT
PRVI
DRUGI
REZULT

DW
DW
DW

81282C34
29A82855
0

>>>>

483

117

Usporedba makronaredaba i potprograma


Makronaredbe openito troe vie memorije jer
njihovo tijelo u memoriji postoji u vie primjeraka
(onoliko koliko ima poziva). Potprogrami se u memoriji
nalaze samo u jednom primjerku.
Potprogrami su sporiji jer se troi vrijeme na njihovo
pozivanje i povratak, a takoer dio vremena troi i
prijenos parametara i povratne vrijednosti.
Makronaredbe se ne pozivaju nego se jednostavno
izvode na mjestu na kojem je to potrebno.
to odabrati? Ovisno o tome to je kritino u
pojedinom dijelu programa - brzina ili zauzee
memorije.
484

118

Napomena: Mjesto upotrebe parametara u tijelu makronaredbe


ograniava argumente koje moemo slati prilikom poziva. U ovom
primjeru kao argumente moemo navoditi samo adrese zadane
apsolutnim ili simbolikim adresiranjem.

Dodatno se smije (iako to nije bila namjera pri pisanju makronaredbe)


kao argument poslati i registar ope namjene, jer se u naredbama
STORE i LOAD u zagradama smije koristiti i indirektno registarsko
adresiranje s odmakom (odmak e u ovom sluaju biti 0)

NILI

MACRO P1,
LOAD R0,
LOAD R1,
OR
R0,
XOR
R2,
STORE R2,
ENDMACRO

P2, REZ
(P1)
(P2)
R1, R2
-1, R2
(REZ)

osim adrese
smije se napisati
i registar

>>>>

485

119

<<<<
Napomena: Uoite da ovako definirana makronaredba mijenja
sadraje registara R0, R1 i R2 to nije poeljno (kao to nije bilo ni kod
potprograma).
Registri se slino potprogramima mogu spremati na stog (ali i na fiksne
lokacije jer se makronaredbe ne mogu pozivati rekurzivno*)

NILI

MACRO P1, P2, REZ


LOAD R0, (P1)
mijenja R0
LOAD R1, (P2)
mijenja R1
OR
R0, R1, R2
mijenja R2
XOR
R2, -1, R2
STORE R2, (REZ)
ENDMACRO
>>>>
________
* Neki makroasembleri dozvoljavaju rekurzivno i uvjetno pozivanje
makronaredaba, ali to prelazi opseg gradiva na ovom predmetu
486

120

<<<<
Budui da se ovoj makronaredbi smiju poslati registri kao argumenti,
to bi se dogodilo da se pozove ovako:

NILI PRVI, DRUGI, R0


Zato makronaredba ne bi radila ispravno?

NILI

MACRO P1,
LOAD R0,
LOAD R1,
OR
R0,
XOR
R2,
STORE R2,
ENDMACRO

P2, REZ
(P1)
(P2)
R1, R2
-1, R2
(REZ)

487

121

Ostali primjeri

488

Ostali primjeri

Primjer:

Napisati potprogram SAZMI kojemu se preko R1 predaje adresa


znakovnog niza u memoriji. Znakovi su zapisani ASCII kodom u
bajtovima. Potprogram treba u znakovnom nizu sva uzastopna
pojavljivanja razmaka saeti u jednostruke razmake. Niz je zakljuen
ASCII-znakom NUL.
A

\0

C D

\0 ... ... ...

stanje bajtova
nije vano
"Slova" (uti) se kopiraju
Razmaci oznaeni sa (zeleni) se saimaju

>>>>
489

Ostali primjeri

Rjeenje:

Upotrijebiti dva pokazivaa:


jedan ita znakove izvornog niza (R1)
drugi pokazuje mjesto na koji se kopira znak izvornog niza (R2)
R1
A

\0

C D

\0 ... ... ...

R2
>>>>
490

Ostali primjeri

Ako je "ispod" R1 slovo, onda


slovo se kopira tamo gdje pokazuje R2
R1 i R2 se pomiu za jedno mjesto

R1
A

R2

\0

>>>>
491

Ostali primjeri

Ako je "ispod" R1 slovo, onda


slovo se kopira tamo gdje pokazuje R2
R1 i R2 se pomiu za jedno mjesto

R1
A

\0

A
R2

>>>>
492

Ostali primjeri

Ako je "ispod" R1 razmak, onda


ako je prethodilo slovo, onda
trenutani razmak se kopira
R1 i R2 se pomiu za jedno mjesto

R1

R2

\0

>>>>
493

Ostali primjeri

Ako je "ispod" R1 razmak, onda


ako je prethodio razmak, onda
trenutani razmak se zanemaruje
R1 se pomie za jedno mjesto

R1

R2

\0

>>>>
494

Ostali primjeri

Ako je "ispod" R1 slovo, onda


trenutano slovo se kopira
R1 i R2 se pomiu za jedno mjesto

itd... do znaka NUL koji


se zadnji kopira ime
zavrava postupak

R1

R2

\0

>>>>
495

Ostali primjeri

U registru R0 pamtit emo prethodno stanje, tj. koji je bio prethodni


znak:
SLO e znaiti slovo
SLO i RAZ e biti dvije labele
koje emo definirati sa EQU
RAZ e znaiti razmak

Prilikom prelaska iz slova u razmak, mijenjat emo stanje u RAZ


Prilikom prelaska iz razmaka u slovo, mijenjat emo stanje u SLO
Poetno stanje bit e SLO

Registar R3 sluit e samo za uitavanje trenutanog znaka i njegovo


ispitivanje
>>>>
496

10

<<<<

; parametar R1 = adresa niza

SAZMI

PUSH
PUSH
PUSH
PUSH

R0
R1
R2
R3

MOVE
MOVE

SLO, R0 ; Poetno: stanje = slovo


R1, R2 ; Inicijalizacija R2

LOADB

R3, (R1)

; Uitaj znak ispod R1

CMP
JR_Z

R3, 0
KRAJ

; Ako je NUL, onda


; idi na kraj.

PETLJA

; Spremi registre

; JE LI TRENUTANI ZNAK RAZMAK ILI NIJE


CMP
R3, 20
; 20 = ASCII razmak
JR_EQ RAZMAK
>>>>
11
497

<<<<

; TRENUTANI ZNAK JE SLOVO

SLOVO

; JE LI PRETHODNI BIO RAZMAK ILI NIJE


CMP
R0, RAZ
JR_EQ RAZMAK_PA_SLOVO

SLOVO_PA_SLOVO
STOREB
ADD
ADD
JR

R3, (R2)
R1, 1, R1
R2, 1, R2
PETLJA

RAZMAK_PA_SLOVO
MOVE
SLO, R0
STOREB R3, (R2)
ADD
R1, 1, R1
ADD
R2, 1, R2
JR
PETLJA

; Kopiraj znak
; Pomakni R1 i R2

; stanje = slovo
; Kopiraj znak
; Pomakni R1 i R2
>>>> 12
498

<<<<

; TRENUTANI ZNAK JE RAZMAK

RAZMAK

; JE LI PRETHODNI BIO RAZMAK ILI NIJE


CMP
R0, RAZ
JR_EQ RAZMAK_PA_RAZMAK

SLOVO_PA_RAZMAK
MOVE
RAZ, R0
STOREB R3, (R2)
ADD
R1, 1, R1
ADD
R2, 1, R2
JR
PETLJA
RAZMAK_PA_RAZMAK
ADD
R1, 1, R1
JR
PETLJA

; stanje = razmak
; Kopiraj znak
; Pomakni R1 i R2

; Pomakni R1
>>>>
499

13

<<<<
KRAJ

STOREB R3, (R2) ; Kopiraj NUL-znak


POP
POP
POP
POP

R3
R2
R1
R0

; Obnovi registre

RET

; definiranje "konstanti"
SLO
RAZ

EQU
EQU

0
1

500

14

Ostali primjeri

Primjer:

Jednostruko povezana lista ima vorove koji u memoriji zauzimaju dvije


32-bitne rijei: prva rije sadri NBC-broj (koji predstavlja vrijednost
vora), a druga rije je pokaziva na sljedei vor liste (tj. sadri adresu
sljedeeg vora). vorovi su sortirani prema svojoj vrijednosti.
33

12

Prvi vor liste ima specijalno znaenje i u njemu se pamti zbroj svih
vrijednosti preostalih vorova liste. Prvi vor je uvijek prisutan, bez
obzira postoje li ostali vorovi. Pretpostavka je da u zbroju nikada nee
doi do prekoraenja opsega.
Zadnji vor u listi prepoznaje se po NULL-pokazivau (tj. lokacija s
pokazivaem sljedeeg vora sadri nulu).
501
>>>>

15

<<<<

Ostali primjeri

Treba napisati potprogram UBACI koji ubacuje novi vor u postojeu


sortiranu listu tako da ona ostane sortirana.

Parametri potprograma su adresa prvog elementa liste i adresa novog


vora. Parametri se alju preko stoga.
Povratna vrijednost je novi zbroj iz prvoga vora liste. Vrijednost se
vraa pomou R0.
Rjeenje:
Potprogram e uvati vrijednosti registara, a parametre e sa stoga
uklanjati glavni program.
>>>>
502

16

<<<< Idejno rjeenje:

Ostali primjeri

Lista se pretrauje dok se ne nae mjesto za ubacivanje.


Jednim pokazivaem kreemo se po vorovima koje ispitujemo.
pokaziva

26

12

Novi element

503

17

<<<< Idejno rjeenje:

Ostali primjeri

Mjesto za ubacivanje je ISPRED prvog vora koji ima veu ili jednaku
vrijednost novom voru.

pokaziva

26

12

Novi element

504

18

<<<< Idejno rjeenje:

Ostali primjeri

Budui da se vor mora ubaciti ISPRED vora na kojeg pokazuje


pokaziva, onda ne moemo dohvatiti prethodni vor u kojem treba
promijeniti pokaziva na sljedei (plava strelica)
pokaziva

26

12

Novi element

505

19

<<<< Idejno rjeenje:

Ostali primjeri

Zato trebamo jo jedan pokaziva koji e uvijek "kasniti" za jedan vor


u odnosu na pokaziva ispitivanog vora, tj. pokaziva e pokazivati
jedan vor ispred onog vora kojeg ispitujemo
pokaziva
koji "kasni"

26

pokaziva

12

Novi element

506

20

Ostali primjeri

Nain rada potprograma:

Pokazuje vor iju vrijednost


usporeujemo s novim vorom
(jedan vor dalje od R1)

Pokazuje vor iza kojeg


se ubacuje novi vor
(poetno na prvi vor)
R1

26

R2

R0

12

Novi element

507

21

Ostali primjeri

Nain rada potprograma:

Pokazuje vor iju vrijednost


usporeujemo s novim vorom
(jedan vor dalje od R1)

Pokazuje vor iza kojeg


se ubacuje novi vor
(poetno na prvi vor)
R1

26

R2

12

Je li (5 2) ?
R0

Novi element

508

22

Ostali primjeri

Nain rada potprograma:

Pokazuje vor iju vrijednost


usporeujemo s novim vorom
(jedan vor dalje od R1)

Pokazuje vor iza kojeg


se ubacuje novi vor
(poetno na prvi vor)
R1

26

R2

12

Je li (5 2) ?
R0

Novi element

Ako je:
nali smo mjesto za ubacivanje
509

23

Ostali primjeri

Nain rada potprograma:

Pokazuje vor iju vrijednost


usporeujemo s novim vorom
(jedan vor dalje od R1)

Pokazuje vor iza kojeg


se ubacuje novi vor
(poetno na prvi vor)
R1

26

R2

12

Je li (5 2) ?
R0

Novi element

Ako nije:
nastavljamo traenje
510

24

Ostali primjeri

Nain rada potprograma:

Pokazuje vor iju vrijednost


usporeujemo s novim vorom
(jedan vor dalje od R1)

Pokazuje vor iza kojeg


se ubacuje novi vor
(poetno na prvi vor)
R1

26

R0

R2

Pomiemo R1 i R2 za
jedan vor dalje

12

Novi element

511

25

Ostali primjeri

Nain rada potprograma:

Pokazuje vor iju vrijednost


usporeujemo s novim vorom
(jedan vor dalje od R1)

Pokazuje vor iza kojeg


se ubacuje novi vor
(poetno na prvi vor)
R1

26

R0

R2

Pomiemo R1 i R2 za
jedan vor dalje

12

Novi element

512

26

Ostali primjeri

Nain rada potprograma:

Pokazuje vor iju vrijednost


usporeujemo s novim vorom
(jedan vor dalje od R1)

Pokazuje vor iza kojeg


se ubacuje novi vor
(poetno na prvi vor)
R1

26

R2

12

Je li (5 3) ?
R0

Novi element

Nije: traimo dalje

513

27

Ostali primjeri

Nain rada potprograma:

Pokazuje vor iju vrijednost


usporeujemo s novim vorom
(jedan vor dalje od R1)

Pokazuje vor iza kojeg


se ubacuje novi vor
(poetno na prvi vor)
R1

26

R0

R2

Pomiemo R1 i R2 za
jedan vor dalje

12

Novi element

514

28

Ostali primjeri

Nain rada potprograma:

Pokazuje vor iju vrijednost


usporeujemo s novim vorom
(jedan vor dalje od R1)

Pokazuje vor iza kojeg


se ubacuje novi vor
(poetno na prvi vor)
R1

26

R0

R2

Pomiemo R1 i R2 za
jedan vor dalje

12

Novi element

515

29

Ostali primjeri

Nain rada potprograma:

Pokazuje vor iju vrijednost


usporeujemo s novim vorom
(jedan vor dalje od R1)

Pokazuje vor iza kojeg


se ubacuje novi vor
(poetno na prvi vor)
R1

26

R2

12

Je li (5 9) ?
R0

Novi element

Jeste: mjesto ubacivanja je


pronaeno - iza vora na kojeg
pokazuje R1
516

30

Ostali primjeri

Nain rada potprograma:

Pokazuje vor iju vrijednost


usporeujemo s novim vorom
(jedan vor dalje od R1)

Pokazuje vor iza kojeg


se ubacuje novi vor
(poetno na prvi vor)
R1

26

R2

R0

Prespajamo pokazivae
9

12

Novi element

517

31

Ostali primjeri

Nain rada potprograma:

Pokazuje vor iju vrijednost


usporeujemo s novim vorom
(jedan vor dalje od R1)

Pokazuje vor iza kojeg


se ubacuje novi vor
(poetno na prvi vor)
R1

26

R2

R0

Prespajamo pokazivae
9

12

Novi element

518

32

Ostali primjeri

Nain rada potprograma:

Pokazuje vor iju vrijednost


usporeujemo s novim vorom
(jedan vor dalje od R1)

Pokazuje vor iza kojeg


se ubacuje novi vor
(poetno na prvi vor)
R1

26

R2

R0

Prespajamo pokazivae
9

12

Novi element

519

33

Ostali primjeri

Nain rada potprograma:

Pogledajmo jo sluaj kad su u listi svi elementi manji


od novog lana (ili je lista prazna)
R1

26

R2

R0

12

505

Novi element

520

34

Ostali primjeri

Nain rada potprograma:

Pogledajmo jo sluaj kad su u listi svi elementi manji


od novog lana (ili je lista prazna)
R1

26

R0

R2

R1 i R2 se pomiu za
jedan vor dalje

12

505

Novi element

521

35

Ostali primjeri
Pogledajmo jo sluaj kad su u listi svi elementi manji
od novog lana (ili je lista prazna)
R1

26

R0

R2

R1 i R2 se pomiu za
jedan vor dalje

12

505

Novi element

522

36

Ostali primjeri

Nain rada potprograma:

Pogledajmo jo sluaj kad su u listi svi elementi manji


od novog lana (ili je lista prazna)
R1

26

R0

R2

I to se ponavlja ...

12

505

Novi element

523

37

Ostali primjeri

Nain rada potprograma:

Pogledajmo jo sluaj kad su u listi svi elementi manji


od novog lana (ili je lista prazna)
R1

26

R0

R2

I to se ponavlja ...

12

505

Novi element

524

38

Ostali primjeri

Nain rada potprograma:

Pogledajmo jo sluaj kad su u listi svi elementi manji


od novog lana (ili je lista prazna)
R1

26

R0

R2

I jo jednom ...

12

505

Novi element

525

39

Ostali primjeri

Nain rada potprograma:

Pogledajmo jo sluaj kad su u listi svi elementi manji


od novog lana (ili je lista prazna)
R1

26

R0

R2

I jo jednom ...

12

505

Novi element

526

40

Ostali primjeri

Nain rada potprograma:

Pogledajmo jo sluaj kad su u listi svi elementi manji


od novog lana (ili je lista prazna)
R1

26

R2

R0

Dok R1 ne doe do
zadnjeg vora, a ...

12

505

Novi element

527

41

Ostali primjeri

Nain rada potprograma:

Pogledajmo jo sluaj kad su u listi svi elementi manji


od novog lana (ili je lista prazna)
R1

26

R2

R0

Dok R1 ne doe do
zadnjeg vora, a ...
R2 postane
NULL-pokaziva

12

505

Novi element

528

42

Ostali primjeri

Nain rada potprograma:

Pogledajmo jo sluaj kad su u listi svi elementi manji


od novog lana (ili je lista prazna)
R1

26

R2

R0

Dok R1 ne doe do
zadnjeg vora, a ...
R2 postane
NULL-pokaziva

505

Novi element

12

Tada smo takoer nali


mjesto za ubacivanje:
to je opet iza vora R1
529

43

UBACI ;;;;; Potprogram UBACI


; Parametri na stogu:
; 1. parametar:
;
adresa prvog vora (glava)
; 2. parametar:
;
adresa novog vora
okvir
PUSH
R1 ; Spremi sve
PUSH
R2 ; registre koje
PUSH
R5 ; potprogram
PUSH
R6 ; mijenja (osim R0).

R6
R5
R2
R1
pov.adr.
NOVI
GLAVA

SP+0
SP+4
SP+8
SP+C
SP+10
SP+14
SP+18

; dohvat vrijednosti novog vora za pretraivanje


LOAD
LOAD

R0, (SP+14)
R6, (R0)

; adresa novog vora u R0


; vrijednost novog vora u R6

; priprema pokazivaa R1 i R2 za pretraivanje


LOAD
LOAD

R1, (SP+18)
R2, (R1+4)

; adresa prvog vora u R1


; adresa drugog vora u R2

>>>>

530

44

<<<<
;;;; PETLJA ZA TRAENJE MJESTA ZA UBACIVANJE
TRAZI CMP
JR_Z

R2, 0
NASAO

; Ako je kraj liste:


; => onda ubacujemo na kraj

; dohvati u R5 vrijednost trenutanog vora i


; usporedi je s vrijednou R6 novog vora
LOAD
R5, (R2)
CMP
R6, R5

JR_ULE NASAO

; ako je novi trenutani =>


; pronaeno je mjesto za ubacivanje

; inae treba nastaviti s petljom za traenje

MOVE
LOAD

R2, R1
; pomakni se na sljedei vor
R2, (R1+4)

JR

TRAZI

; nastavi s traenjem

>>>>

531

45

<<<<
;;;; DIO ZA UMETANJE NOVOG VORA U LISTU
NASAO STORE
STORE

R0, (R1+4) ; stavi novi vor iza prethodnog


R2, (R0+4) ; stavi trenutani vor iza novog

; izraunavanje novog zbroja u prvom voru:


LOAD
LOAD

R1, (SP+18); dohvati adresu prvog


R0, (R1)
; dohvati dosadanji zbroj

ADD
STORE

R0, R6, R0 ; novi zbroj stavi u R0 (rezultat)


R0, (R1)
; spremi ga u prvi vor

POP
POP
POP
POP

R6
R5
R2
R1

;
;
;
;

obnovi
vrijednosti
spremljenih
registara

RET
532

46

Ostali primjeri

Primjer:

U memoriji se nalazi dvostruko povezana nesortirana lista. Svaki vor


zauzima tri memorijske lokacije: na prvoj je NBC broj, na drugoj je
pokaziva na sljedei vor liste, a na treoj je pokaziva na prethodni
vor liste. Prvi vor liste ima specijalno znaenje i uvijek je prisutan u
listi. U njemu se pamti ukupan broj preostalih vorova u listi.
#4

276

12

>>>>

533

47

<<<<

Ostali primjeri

Treba napisati potprogram IZBACI koji prima preko stoga dva


parametra: pokaziva na prvi vor liste i NBC broj (X). Potprogram trai
prvo pojavljivanje vora u kojemu je upisan broj X. Ako ga nae,
izbacuje taj vor iz liste. Povratna vrijednost je adresa izbaenog vora
ili nula ako vor nije pronaen. Vrijednost se vraa pomou R1.
Potprogram ne smije mijenjati sadraje registara u glavnom programu.
Rjeenje:
Parametre e sa stoga uklanjati glavni program.

>>>>

534

48

Ostali primjeri

<<<< Nain rada potprograma:


Pokaziva na vor koji se
usporeuje s X (poetno
pokazuje na drugi vor)
R1

#4

276

12

R2 X

Broj X bit e stalno spremljen u R2

535

49

Ostali primjeri

<<<< Nain rada potprograma:

Pomiemo R1 za jedan
vor dalje ...
R1

#4

276

12

R2 X
536

50

Ostali primjeri

<<<< Nain rada potprograma:

Pomiemo R1 za jedan
vor dalje ...
I to se ponavlja sve
dok...

R1

#4

276

12

R2 X
537

51

Ostali primjeri

<<<< Nain rada potprograma:

Ne pronaemo vor ili


doemo do kraja liste
(tada traeni vor ne
postoji)

R1

#4

276

12

R2 X
538

52

Ostali primjeri

<<<< Nain rada potprograma:

Ako pronaemo vor, lako ga


izbacujemo, jer u njemu postoje
pokazivai i na prethodni i na
sljedei vor

R1

#4

276

12

R2 X
539

53

Ostali primjeri

<<<< Nain rada potprograma:

Prilikom traenja, u R0 emo


uitati vrijednost vora na kojeg
pokazuje R1
R0 8

R1

#4

276

12

R2 X
540

54

Ostali primjeri

<<<< Nain rada potprograma:

R0 8

R1

#4

R2 X

276

12

R0 koristimo pri usporedbi s R2


(tj. s brojem X)
541

55

Ostali primjeri

<<<< Nain rada potprograma:

Kod izbacivanja vora,


registri se postavljaju ovako
(na ovoj slici izbacuje se vor 276):
R0

#4

R1

276

R2

12

542

56

Ostali primjeri

<<<< Nain rada potprograma:

Pokazivai u vorovima se
prespajaju ovako:

R0

#4

R1

276

R2

12

543

57

IZBACI ;;;;; Potprogram IZBACI


; Parametri na stogu:
; 1. parametar:
;
adresa prvog vora
; 2. parametar:
;
broj X koji se trai

TRAZI

okvir

; spremi registre
; iz glavnog programa

R2
R0
pov.adr.
BROJ X
GLAVA

SP+0
SP+4
SP+8
SP+C
SP+10

PUSH
PUSH

R0
R2

LOAD
LOAD
LOAD

R2, (SP+0C) ; dohvati broj X


R1, (SP+10) ; dohvati adresu prvog vora
R1, (R1+4) ; pripremi pokaziva za traenje

CMP
JR_Z

R1, 0
IZLAZ

; ako je kraj => vor nije naen

LOAD R0, (R1+0)


CMP
R0, R2
JR_EQ NASAO

; dohvati vrijednost vora


; usporedi je sa X
; ako su isti => vor je naen

LOAD
JR

; pomakni se na sljedei vor


; nastavi s traenjem

R1, (R1+4)
TRAZI

>>>> 544

58

<<<<
NASAO ;;;; odspoji naeni vor iz liste
LOAD
R0, (R1+8) ; stavi adresu prethodnog u R0
LOAD
R2, (R1+4) ; stavi adresu sljedeeg u R2
STORE

R2, (R0+4)

; stavi sljedei iza prethodnog

OR
JR_Z

R2, R2, R2
DALJE

; provjeri izbacuje li se zadnji


; vor iz liste (tj. R2 je NULL)

STORE

R0, (R2+8)

; stavi prethodni ispred sljede.

DALJE MOVE
STORE
STORE

0, R0
R0, (R1+4)
R0, (R1+8)

; odspoji pokazivae
; u voru kojeg
; izbacuje iz liste

;;;; smanji broja


LOAD
R0, (SP+10)
LOAD
R2, (R0+0)
SUB
R2, 1, R2
STORE R2, (R0+0)
IZLAZ POP
POP
RET

R2
R0

vorova u 1. voru liste


; dohvati adresu 1. vora
; dohvati broj vorova liste
; smanji broj vorova
; upii ga natrag u 1. vor
; obnovi registre
; iz glavnog programa
545

59

Ostali primjeri

Primjer:

U memoriji se nalazi sortirano binarno stablo. Svaki vor zauzima tri


memorijske lokacije: na prvoj je NBC broj, na drugoj je pokaziva na
lijevo podstablo, a na treoj je pokaziva na desno podstablo.

Poseban pokaziva (ROOT) u glavnom programu pokazuje na korijen


stabla.
ROOT

18

24

29

12

25

43
546

60

<<<<

Ostali primjeri

Treba napisati potprogram PISI koji e ispisati sve brojeve iz vorova


stabla, ali u rastuem redoslijedu. Parametar potprograma PISI je
adresa ishodinog vora, a prenosi se stogom. Povratna vrijednost
potprograma je broj ispisanih vorova, a vraa se preko R0.
Ispisivanje se obavlja tako da se pozove potprogram PRINT i kao
parametar mu se poalje broj koji se eli ispisati. Parametar za PRINT
alje se preko R0, a PRINT nema povratne vrijednosti. Pretpostavite da
potprogram PRINT ve postoji negdje u memoriji.
Treba napisati i glavni program, koji e ispisati stablo ija adresa je u
pokazivau ROOT, a broj ispisanih vorova treba spremiti U R5.
>>>>
547

61

<<<<

Ostali primjeri

Idejno rjeenje (u C-u):


int PISI ( struct cvor_stabla * cvor ) {
int brojac;
if( cvor == NULL )
return 0;

// "in-order" obilazak
brojac = PISI( cvor -> lijevi );
PRINT( cvor -> broj );
brojac += PISI( cvor -> desni );
return (brojac+1);
}

>>>>
548

62

GLAVNI LOAD R0, (ROOT)


PUSH R0
CALL PISI
ADD SP,4,SP
MOVE R0, R5
HALT
ROOT
DW ... ; adresa stabla

okvir

brojac
R1
pov.adr
CVOR

SP+0
SP+4
SP+8
SP+C

PISI ;;;;; Potprogram PISI


; Parametar na stogu:
; 1. parametar:
;
adresa vora
PUSH

R1

; spremi registre

SUB

SP, 4, SP

; lokalna varijabla brojac

LOAD
MOVE
CMP
JR_Z

R1, (SP+C)
0, R0
R1, 0
VAN

; dohvati adresu vora


; if( cvor == NULL)
; idi na return
549

>>>>

63

<<<<

LOAD
PUSH
CALL
ADD

R0,(R1+4) ; cvor->lijevi
R0
okvir
PISI
; PISI()
SP, 4, SP

brojac
R1
pov.adr
CVOR

STORE R0,(SP+0) ; brojac =


;
povratna vrijednost

VAN

SP+0
SP+4
SP+8
SP+C

LOAD
CALL

R0, (R1)
PRINT

; cvor->broj
; PRINT()

LOAD
PUSH
CALL
ADD

R0,(R1+8) ; cvor->desni
R0
PISI
; PISI()
SP, 4, SP

LOAD
ADD
ADD

R1,(SP+0) ; stavi brojac u R1


R1,R0,R0 ; brojac += povratna vrijednost
R0, 1, R0 ; stavi (brojac+1) u R0 za return

; return
ADD
SP, 4, SP ; ukloni lokalnu var.
POP
R1
; obnovi registre
RET

550

64

Prikljuci - openito

2
551

Prikljuci
Svaki procesor, memorija ili bilo koja druga komponenta ostvarena
kao ip ima odreen broj prikljuaka ili izvoda (nazivaju se jo i pinovi
prema engleskom izvorniku)

5523

Prikljuci - podjela po namjeni


Sabirnice se prema namjeni obino dijele na:
adresnu sabirnicu (address bus)
podatkovnu sabirnicu (data bus)
upravljaku sabirnicu (control bus)
Adresni prikljuci postavljaju adresu na adresnu sabirnicu, od
procesora prema memoriji i vanjskim jedinicama. Procesor, kao
aktivna i vodea komponenta, adresira druge komponente zadajui
im adresu s koje eli itati ili pisati podatak
Podatkovni prikljuci spojeni su na podatkovnu sabirnicu i slue za
prijenos podataka izmeu procesora i memorije ili izmeu procesora
i vanjske jedinice prilikom operacija itanja i pisanja
Upravljaki prikljuci imaju razne funkcije vezane uz rad procesora i
openito slue za sinkronizaciju rada pojedinih dijelova raunala
4
553

Prikljuci - podjela po namjeni


Prikljuci koji imaju upravljaku namjenu (moemo promatrati
kao da prenose logiko stanje true ili false):
mogu biti aktivni u niskoj razini i tada se oznaavaju imenom s
potezom. Na primjer IREQ moe oznaavati zahtjev za prekid.
Ako je prikljuak nisko, onda znai da postoji zahtjev za prekid,
a u suprotnom ne postoji.
mogu biti aktivni u visokoj razini i tada se nazivaju imenom bez
dodatnih oznaka. Na primjer READ moe oznaavati ciklus
itanja. Ako je prikljuak visoko, onda se trenutano obavlja
ciklus itanja, a u suprotnom se ne obavlja ciklus itanja

>>>>

5
554

Prikljuci - podjela po namjeni


<<<<
mogu oznaavati jedno od dva mogua stanja i tada u imenu
sadre nazive oba stanja. Na primjer READ/WRITE moe
oznaavati da li se trenutano izvodi ciklus itanja ili pisanja. Ako
je prikljuak nisko, onda se izvodi itanje (READ ima potez). Ako
je prikljuak visoko, onda se izvodi ciklus pisanja (WRITE nema
potez)

U pravilu, komponente koje oslukuju upravljake prikljuke


aktiviraju se na brid signala (tipino u trenutku kad signal
prelazi iz neaktivnog u aktivno stanje)
Kad se ne promatra brid, nego stanje signala, onda se stanje
"oitava" u tono definiranim trenutcima
6
555

Prikljuci - "irina" prikljuaka


Po irini prikljuci mogu biti:
Jednostruki prikljuci su oni koji imaju svoju samostalnu
namjenu. To su obino upravljaki prikljuci
Prikljuci grupirani u skupinu po nekoj zajednikoj funkciji. Na
primjer, mogu biti 32 adresna prikljuka, a pojedinani se
prikljuci oznaavaju nazivima ADR0, ADR1, ... ADR31

7
556

Prikljuci - smjer prikljuaka


Prikljuci se mogu podijeliti po smjeru signala (podataka)
koji njima putuje na:
ulazne
izlazne
dvosmjerne
Smjer prikljuka uvijek se definira u odnosu na
komponentu koju promatramo

8
557

Prikljuci - smjer prikljuaka


Komponenta upravlja svojim izlaznim prikljucima, a druge
komponente (spojene preko sabirnice na njih) "oslukuju"
njihovo stanje
Za ulazne prikljuke komponenta samo "oslukuje" stanje na
njima. Sabirnicama koje su povezane na ove prikljuke
upravljaju druge komponente
Dvosmjerni prikljuci spojeni su na sabirnicu kojom u
razliitim trenutcima upravljaju razliite komponente. Pri tome
uvijek samo jedna komponenta upravlja sabirnicom u
nekom trenutku, a prikljuci svih ostalih komponenata su ili
ulazni ili u stanju visoke impedancije

9
558

Prikljuci - smjer prikljuaka


Stanje visoke impedancije omoguuje jednostavno spajanje
vie komponenata na istu sabirnicu (ponoviti iz
"Digitalne")
Sklopove s tri stanja simboliki prikazujemo ovako:

ulaz

izlaz
K

10
559

Prikljuci - smjer prikljuaka


Ako je upravljaki ulaz K neaktivan (0), onda je izlaz u stanju
visoke impedancije (high Z)
Ako je upravljaki ulaz K aktivan (1), onda je stanje ulaza
prenosi na izlaz
K
ulaz izlaz

ulaz

izlaz
K

0
0
1
1

0
1
0
1

Z
Z
0
1

11
560

Prikljuci - smjer prikljuaka


Sklop s tri stanja omoguuje spajanje vie prikljuaka na istu
sabirnicu
Sabirnicom smije upravljati najvie jedan prikljuak i on
odreuje stanje sabirnice (0 ili 1)
Svi ostali prikljuci moraju biti neaktivni i oni ne utjeu na
stanje na sabirnici

12
561

Prikljuci - smjer prikljuaka


Postoje i posebne vrste prikljuaka. To su tzv. open
collector prikljuci (ponoviti iz "Digitalne")
oni omoguuju da se vie izlaznih prikljuaka spoji zajedno
na jednu sabirnicu i da svi zajedno njome upravljaju u istom
trenutku
stanje sabrnice odreeno je logikom funkcijom spojeni-I (wiredAND) izmeu svih prikljuaka (naziva se jo i wired-OR - za
negativnu logiku)
+

13
562

Prikljuci - smjer prikljuaka


Ako su svi prekidni prikljuci neaktivni (u visokoj su
razini), onda je cijela sabirnica neaktivna (u visokoj je
razini)

tri vanjske
jedinice

14
563

Prikljuci - smjer prikljuaka


Ako se bilo koji prekidni prikljuak aktivira (aktivna
razina je u niskom), onda se aktivira cijela sabirnica, tj.
prelazi u nisku razinu

tri vanjske
jedinice

15
564

Prikljuci - smjer prikljuaka


Open collector prikljuci se koriste, npr. za spajanje
prekidnih priljuaka vanjskih jedinica na jednu sabirnicu
Na ovaj nain procesor koji oslukuje prekidnu liniju
moe detektirati da je netko postavio zahtjev za prekid
+

0
procesor

tri vanjske
jedinice

16
565

Prikljuci procesora FRISC

566

Prikljuci procesora FRISC

567

Sabirnice - Osnovno

568

Sabirnice
Sabirnica (engl. bus) je spojni put koji povezuje vie ureaja
(tj. dijelova raunalnog sustava), a sastoji se od skupa vodia

ureaj 1

ureaj 2

...

ureaj n

20
569

Sabirnice
Prednosti sabirnice:
mala cijena (isti spojni put dijeli vie ureaja)
prilagodljivost prilikom projektiranja i nadogradnje raunala
(jednostavno dodavanje ureaja)
standardiziranost

Nedostatci sabirnice:
mala propusnost
ograniena duljina sabirnice
ogranien broj ureaja koji se mogu spojiti na jednu sabirnicu
problemi zbog ureaja razliite brzine

21
570

Sabirnice
Alternativa sabirnici je spajanje dva ureaja (point-topoint) pomou vlastitog spojnog puta prilagoenog upravo
tim ureajima
Prednost je vea brzina komunikacije
Nedostatak je vea cijena (vie spojnih putova, vie prikljuaka
na ipu)

ureaj X

ureaj 1

ureaj 2

...

ureaj n

22
571

Sabirnice - memorijske i UI
Sabirnice se mogu dijeliti i na:
memorijsku sabirnicu
ulazno-izlaznu (U/I) sabirnicu
sabirnice specijalne namjene (npr. grafika)

Memorijska sabirnica:
povezuje procesor i memoriju
male duljine
velike brzine rada
prilagoena brzini memorije

23
572

Sabirnice - memorijske i UI
U-I sabirnica:
povezuje U-I jedinice s procesorom
velika duljina (npr. USB 2.0 - do 5 metara)
manja brzina rada nego memorijska sabirnica
prilagodljivost razliitim brzinama rada pojedinih U-I jedinica
mogunost spajanja velikog broja U-I jedinica (npr. 128)
U-I sabirnica se spaja na procesor i memoriju na dva naina (vidi
sljedei slajd)

>>>>
24
573

Sabirnice - memorijske i UI
Zajednika memorijska i U-I sabirnica (backplane bus)
...
procesor
memorija
U/I jedinica 1
U/I jedinica n
zajednika memorijska i U-I sabirnica

Spajanje memorijske i UI sabirnice pomou posebnog


meusklopa (tj. neizravno)
procesor

memorija

meusklop

memorijska
sabirnica

U/I jedinica 1

...

U/I jedinica n

U-I sabirnica

25
574

Multipleksirane sabirnice
Kod procesora vrlo niske cijene zbog utede
Da bi mogli imati sabirnice veih irina (npr, podatkovna i adresna),
koristile su se tzv. multipleksirane sabirnice to znai da isti
spojni putovi imaju vie namjena, ali ne u isto vrijeme

26
575

Multipleksirane sabirnice
Na primjer, adresna i podatkovna sabirnica mogu dijeliti iste spojne
putove i to tako da:
se u jednom trenutku prenosi adresa
a u drugom trenutku se prenosi podatak

Vremenski ove funkcije moraju biti jasno odijeljene jer se ne


mogu dogaati istodobno
ADR/DATA

ADR

ADR

ADR

DATA

DATA

DATA

Multipleksirane
sabirnice

Nemultipleksirane
sabirnice

27
576

Sabirnice - sabirniki protokoli

577

Sabirnice - sabirniki protokoli


Toan redoslijed svih koraka u komunikaciji naziva se
sabirniki protokol (bus protocol)
Sabirnika transakcija (bus transaction) je slijed koraka
potrebnih da bi se na sabirnici izvela odreena operacija, kao
npr. operacija itanja ili pisanja
Sabirnika transakcija obino sadri:
zahtjev (request)
odgovor (response)

Unutar zahtjeva i/ili odgovora moe se nalaziti podatak,


adresa, naredba i sl.
29
578

Tumaenje oznaka na vrem. dijagramu:

rastui brid signala

niska razina signala


padajui brid signala

visoka razina signala

CLOCK

ADR

stanje visoke
impedancije

valjani podatak

promjena podatka

povratak u visoku
impedanciju

prijelaz iz visoke impedancije u


stanje u kojem je na sabirnici
podatak
30
579

Sabirnice - sinkrone i asinkrone


Sabirnice se prema nainu komunikacije dijele na*:
sinkrone
asinkrone

Sinkrone sabirnice:
sve operacije su sinkronizirane s taktom sustava (tj.
clockom)
jednostavne su za implementaciju
imaju veliku brzinu rada pa zato i malu duljinu
bolje su prilagoene za sluaj kad svi ureaji imaju jednaku
brzinu
imaju mogunost prilagodbe brzine rada, ali se komunikacija
veinom odvija predvienom brzinom
ee se koriste za memorijske sabirnice

31
580

Sabirnice - sinkrone
Pojednostavljeni prikaz sinkrone komunikacije:
clk

adr
2

data

Sve operacije postavljanja adresa, itanja podataka i


uklanjanja adresa i podataka odvijaju se u vremenskim
trenutcima tono definiranim u odnosu na CLOCK

32
581

Sabirnice - asinkrone
Asinkrone sabirnice:
ne koriste CLOCK za sinkronizaciju
ureaji se sinkroniziraju tzv. rukovanjem (engl.
handshaking protocol)
rukovanje je postupak u kojem strane koje komuniciraju
prelaze na sljedei korak komunikacije tek kad obje strane
potvrde da je prethodni korak dovren
sloenije su za implementaciju
imaju manju brzinu rada
mogu imati veliku duljinu
bolje su prilagoene za sluaj kad ureaji imaju razliite brzine
ee se koriste za U-I sabirnice
33
582

Sabirnice - asinkrone
Pojednostavljeni prikaz asinkrone komunikacije (npr. itanje):
1
ADR_STB
ADR

DATA

DATA_ACK

1) Procesor postavlja adresu na ADR i dojavljuje to memoriji


aktiviranjem signala ADR_STB (address strobe)

34
583

Sabirnice - asinkrone
Pojednostavljeni prikaz asinkrone komunikacije (npr. itanje):
1
ADR_STB
ADR

2
DATA

DATA_ACK

2) Memorija je detektirala ADR_STB i zapoela operaciju itanja;


nakon nekog vremena postavlja podatak na DATA i dojavljuje
to procesoru aktiviranjem DATA_ACK (acknowledge)
35
584

Sabirnice - asinkrone
Pojednostavljeni prikaz asinkrone komunikacije (npr. itanje):
1
3
ADR_STB
ADR

2
DATA

itanje

DATA_ACK

3) Procesor je detektirao DATA_ACK i zna da se na DATA nalazi


podatak; procesor ita podatak sa DATA te uklanja adresu sa
ADR i dojavljuje to memoriji deaktiviranjem ADR_STB
36
585

Sabirnice - asinkrone
Pojednostavljeni prikaz asinkrone komunikacije (npr. itanje):
1
3
ADR_STB
ADR

2
DATA

4
itanje

DATA_ACK

4) Memorija je detektirala deaktiviranje ADR_STB i zna da je procesor


proitao podatak; memorija uklanja podatak sa DATA i javlja to
procesoru deaktiviranjem DATA_ACK
37
586

Sabirnice - asinkrone
Pojednostavljeni prikaz asinkrone komunikacije (npr. itanje):
1
3
ADR_STB
ADR

2
DATA

4
itanje

DATA_ACK

Nakon koraka 4) procesor detektira deaktiviranje DATA_ACK i


moe zapoeti novo itanje ili pisanje podatka, tj. moe ponovno
zapoeti s korakom 1)
38
587

Sabirnice - sinkrone i asinkrone


Komentari:
I sinkrone i asinkrone sabirnice imaju mogunost prilagodbe
razliitim brzinama ureaja spojenih na sabirnicu. Osnovna razlika
je:
u tome to su asinkrone sabirnice upravo predviene za
spajanje ureaja razliite brzine
spajanje ureaja razliite brzine je vie iznimka nego pravilo kod
sinkronih sabirnica, ili takvi ureaji sudjeluju u manjem postotku
sabirnikih transakcija
Asinkroni protokoli trebaju potvrdu da bi mogli nastaviti sa
sljedeim koracima bez obzira koliko je vremena proteklo
Sinkroni protokoli nastavljaju s radom automatski kad se dosegne
odreeno stanje CLOCK-a, a usporenje rada se mora
izriito zahtijevati
39
588

Sabirnice - sinkrone i asinkrone


Komentari:
Neke memorijske sabirnice koriste asinkrone protokole
Meutim, to ne znai da te sabirnice nemaju CLOCK ili da ga
uope ne koriste
CLOCK se koristi u procesoru za njegov interni rad
Budui da interni rad procesora ovisi o njegovoj komunikaciji
preko sabirnica, onda su i na asinkronoj sabirnici barem neki
koraci (poetni) sinkronizirani sa signalom CLOCK

40
589

Sabirnice procesora FRISC

590

Sabirnice - FRISC
Za FRISC odabiremo:
nee se koristiti posebni spojni putovi izmeu raznih dijelova
sustava
zajednika memorijska i U-I sabirnica (tzv. backplane)
sinkrona sabirnica s mogunou prilagodbe brzine
brzina se prilagoava umetanjem tzv. ciklusa ekanja

42
591

Sabirnice - FRISC
Definirajmo sabirnike protokole za FRISC
Par napomena:
Bit e jednaki za pristup memoriji ili U-I jedinicama (u
objanjenjima se spominje samo memorija, ali isto vrijedi i za UI jedinice)
Pokazat emo protokole za itanje i pisanje podataka
U sluaju normalne brzine, traju jedan takt CLOCK-a
U sluaju sporih memorija ili U-I jedinica, umeu se dodatni
ciklusi ekanja (svaki traje po jedan takt CLOCK-a)
Promatramo samo one sabirnike vodove koji su relevantni za
operacije itanja i pisanja

43
592

itanje bez stanja ekanja


1 period clock-a

clock

adr[31:0]
rd
wr

wait
data[31:0]

A B C

D E F

>>>>
44
593

Pisanje bez stanja ekanja


1 period clock-a

clock

adr[31:0]
rd
wr

wait
data[31:0]

A B

C D

>>>>
45
594

itanje sporih mem. s jednim stanjem


ekanja
itanje s jednim wait periodom

clock
CLK_

clk
adr[31:0]
rd
wr

wait
data[31:0]

A B

D1

D2 E F

46
595

Spajanje FRISC-a i memorije

596

Spajanje FRISC-a i memorije


Naelna shema spajanja:
DATA0 - DATA31

ADR0 - ADR31

READ

FRISC
WRITE

Memorijski
podsustav

SIZE0 - SIZE1

WAIT

48
597

Memorijski podsustav

Naelna shema memorijskog podsustava (4GB = 4 x (1G x 1B) ) :

WRITE
SIZE
2
WAIT

DATA 0-7

bitovi 8-15

bitovi 0-7

CS

CS

ADR 0-1
CS 3

CS 2

CS 1

CS

bitovi 23-16

OE

bitovi 31-24

CS

Mem. 1GB

OE

Mem. 1GB

OE

Mem. 1GB

ADR 2-31

ADR
32

DATA 8-15

ADR 2-31

READ

DATA 16-23

Mem. 1GB

ADR 2-31

OE

DATA 24-31

ADR 2-31

DATA
32

CS 0

Dekoder

Kanjenje

49
598

Izvoenje naredaba i protona


struktura

1
599

Izvoenje naredaba u procesoru


Podsjetnik - tipine faze u izvoenju naredbe su:
dohvat naredbe iz memorije (fetch)
dekodiranje naredbe (decode)
izvoenje naredbe (execute)

Kao to emo vidjeti kasnije kompleksniji procesori imaju


puno vie koraka

600

Izvoenje naredaba u procesoru


Npr. neka imamo redom naredbe ADD, SUB i XOR koje se trebaju izvesti:
ADD

Dohvati Dekodiraj
ADD
ADD

Izvedi
ADD

Dohvati Dekodiraj
SUB
SUB

SUB

Izvedi
SUB

Dohvati Dekodiraj
XOR
XOR

XOR

T1

T2

T3

T4

T5

T6

T7

T8

Izvedi
XOR

T9

Ako bi se naredbe izvodile slijedno po fazama, tada bi za svaku naredbu


bila potrebna 3 vremenska perioda (uz pretpostavku da svaka faza traje
jedan period).
Ovo predstavlja STARI nain izvoenja ---- NEEFIKASNO
Jo uvijek se koristi kod nekih jednostavnih procesora.

6015

Izvoenje naredaba i protona


struktura
Podjelimo li faze tako da su meusobno neovisne,
moemo primjeniti naela pokretne trake, pa se sve tri
faze mogu izvoditi istodobno:
NAREDBE

Dohvat

Dekodiranje Izvoenje

Ovakva organizacija izvoenja se u literaturi naziva cjevovod


(engl. pipeline), a mi ga nazivamo protona struktura.
Svaka razina protone strukture (engl. pipeline stage) izvodi
jednu fazu.
Glavna namjena je ubrzanje izvoenja
6
602

Izvoenje naredaba i protona


struktura
Sada se prije spomenute tri naredbe ADD,SUB i XOR mogu puno
efikasnije i bre izvesti:
Dohvat
Dekodiranje Izvoenje
ADD
SUB
XOR

ADD

Dohvati Dekodiraj Izvedi ADD


ADD
ADD

SUB

Dohvati Dekodiraj Izvedi SUB


SUB
SUB

XOR

Dohvati Dekodiraj
XOR
XOR
T1

T2

T3

T4

Izvedi
XOR

T5

7
603

Izvoenje naredaba i protona


struktura
Podijelimo li naredbu na N faza, onda moemo izraunati ubrzanje:
u slijednom izvoenju:
za svaku naredbu treba N vremenskih perioda
za M naredaba slijedno izvoenje traje: M * N
u protonom izvoenju:
prva naredba traje N perioda, a svaka sljedea traje 1 period
za M naredaba protono izvoenje traje: N + (M-1)
za veliki M vrijedi:

(M*N) / (N+M-1) (M*N) / (M) = N

Protono izvoenje u N razina je u prosjeku N puta bre


od izvoenja korak-po-korak (uz pretpostavku linearnog
programa bez hazarda)
8
604

Izvoenje naredaba i protona


struktura
Radi veeg ubrzanja, dobro bi bilo naredbu podijeliti na
to vie faza (tj. protonu strukturu na to vie razina)
Brzina cijele protone strukture ovisi o brzini najsporije
razine, tj. najsporija razina predstavlja ogranienje (usko
grlo)
Zato se pokuavaju odabrati faze tako da svaka traje im
krae, ali i tako da sve imaju podjednako trajanje

9
605

Izvoenje naredaba i protona


struktura
RISC arhitekture upravo koriste navedena naela da se izvodi
puno brzih i jednostavnih naredaba ime se vrijeme izvoenja
skrauje
Zato se protona struktura i poela koristiti s pojavom
procesora RISC arhitekture
Danas se, zbog napretka tehnologije, protonost koristi u
veini procesora bez obzira jesu li RISC ili CISC
U nastavku emo definirati protonu strukturu procesora
FRISC
10
606

Protona struktura FRISC-a


Kako bi zadrali jednostavnost naeg procesora, za
efikasnije izvoenje naredaba uvesti emo
najjednostavniju moguu protonu strukturu
Odabiremo protonu strukturu FRISC-a sa dvije
razine, koje emo nazvati:
razina za dohvat
razina za izvoenje
Dohvat

Izvoenje

12
607

Protona struktura FRISC-a


Podjela operacija izmeu razina je ovakva:
Razina za dohvat
Dohvat naredbe
Dekodiranje naredbe
Dohvat operanada
Razina za izvoenje
Izvoenje AL operacije
Spremanje rezultata

13
608

Podjela naredaba po brzini izvoenja


Trajanje operacija u svakoj razini je jedan period signala
vremenskog voenja CLOCK-a (uz pretpostavku da
memorija nije spora)
Naredbe procesora FRISC razlikuju se po nainu kako se
izvode:
Faza dohvata svih naredaba traje jedan period
Faza izvoenja takoer traje jedan period, ali
kod nekih naredaba nije mogue preklapanje s
fazom dohvata sljedee naredbe
14
609

Podjela naredaba po brzini izvoenja


Kod jednostavnih naredaba mogue je preklapanje faze
izvoenja sa fazom dohvata sljedee naredbe.
Ove naredbe zovu se jednociklusne jer im efektivno
vrijeme izvoenja u protonoj strukturi iznosi jedan period
(ciklus) CLOCK-a.
Ove naredbe efikasno koriste protonu strukturu.
U jednociklusne naredbe spadaju:
Aritmetiko-logike naredbe
Registarske naredbe
Upravljake naredbe kod kojih uvjet nije zadovoljen

15
610

Jednociklusne naredbe
Izvoenje slijeda jednociklusnih naredaba:

Dohvat

Izvoenje

T1

ADD

T2

SUB

ADD

T3

XOR

SUB

T4

AND

XOR

T5

AND

16
611

Podjela naredaba po brzini izvoenja


Kod sloenijih naredaba nije mogue preklapanje faze
izvoenja s fazom dohvata sljedee naredbe
Takve naredbe zovu se dvociklusne naredbe jer im
efektivno vrijeme izvoenja u protonoj strukturi
iznosi dva perioda (ciklusa) CLOCK-a.
Ove naredbe ne koriste efikasno protonu strukturu
U dvociklusne naredbe spadaju:
Memorijske naredbe
Upravljake naredbe kod kojih je uvjet za izvoenje
zadovoljen

17
612

Dvociklusne naredbe
Izvoenje slijeda dvociklusnih naredaba:
Dohvat
T1

LOAD

T2
T3

LOAD
JP

T4
T5
T6

Izvoenje

JP
STORE
STORE

18
613

Jednociklusne naredbe: dohvat


Prva polovica perioda:
Postavljanje adrese na adresnu sabirnicu (PC
Aktiviranje signala rd**

AR)

Druga polovica perioda *:


itanje naredbe
(AR)
IR
Deaktiviranje signala rd**
Dekodiranje naredbe
dekodiranje
Dohvat operanada i slanje u ALU
operandi ALU
Izbor i pokretanje ALU operacije
Postavljanje PC za sljedeu naredbu
PC+4 PC
*Ovi koraci izvode se u sluaju da je memorija dovoljno brza i da nije
bio aktiviran WAIT signal
** aktiviranje i dekativiranje signala rd i wr se nee vie navoditi

19
614

Jednociklusne naredbe: dohvat

DR

D[0..31]

SHUFFLER

IR

EXT

REG

SR

ALU

8
C

AR

PC

A[0..31]

20
615

Dohvat
Do trenutka dekodiranja sve naredbe imaju isti nain
dohvata naredbe

21
616

Jednociklusne naredbe: izvoenje


Prva polovica perioda:
ALU zavrava operaciju i sprema se rezultat (osim kod
CMP)
ALU Reg
Spremaju se zastavice u SR

Druga polovica perioda:


- Nema aktivnosti vezano za izvoenje naredbe

22
617

Jednociklusne naredbe: izvoenje

DR

D[0..31]

SHUFFLER

IR

EXT

REG

SR

ALU

8
C

AR

PC

A[0..31]

23
618

Izvoenje dvije AL naredbe u protonoj


strukturi

T1

T2

T3

clock

PC>AR
naredba1

(AR)>IR,
dekodiranje
oper>ALU
PC+4>PC

Spremanje
rez. + zast.

PC>AR
naredba2

(AR)>IR,
dekodiranje
oper>ALU
PC+4>PC

Spremanje
rez. + zast.

24
619

Jednociklusne naredbe izvoenje: Primjer


ADD R1,R2,R3
MOVE 100, R1
DR

D[0..31]

SHUFFLER

IR

EXT

REG

SR

ALU

8
C

AR

PC

A[0..31]

25
620

Hazardi
Do sada objanjeni rad protone strukture za jednociklusne naredbe
bio je idealan, no u stvarnom radu postoje situacije koje uzrokuju
da protona struktura djelomino gubi svoju efikasnost
U nekim situacijama protona struktura ne moe obraditi sljedeu
naredbu odmah u sljedeem periodu
Takve situacije nazivaju se hazardi
Postoje tri osnovna tipa hazarda:
Strukturni
Upravljaki
Podatkovni
26
621

Strukturni hazard
Strukturni hazard je pojava kad procesor u odreenom
trenutku ne moe izvesti sve faze onih naredaba koje se
nalaze u protonoj strukturi, jer struktura (tj. sklopovlje)
procesora ne omoguuje istodobno izvoenje svih tih faza
Jednostavan primjer strukturnog hazarda je izvoenje
naredbe npr. LOAD ili npr. STORE kod procesora s Von
Neumannovom arhitekturom. Struktura memorijskog suelja
(Von Neumannova arhitektura) ne dozvoljava istovremeno
dva pristupa memoriji:
jedan pristup treba za izvoenje naredbe (npr. kod naredbe
STORE za spremanje podatka)
drugi pristup je dohvat strojnog kda sljedee naredbe

27
622

Strukturni hazard
Strukturni hazard rjeava se tako da procesor odgodi
izvoenje naredaba koje se nalaze u prethodnim
razinama protone strukture (to su naredbe koje su
kasnije ule u protonu strukturu) dok se uzrok hazarda
ne ukloni.
Odgoda izvoenja naredaba u prethodnim razinama u
literaturi se naziva mjehuri (bubble). Slikovito se
promatra kao da je u protonu strukturu uao mjehuri
koji prolazi kroz razine i uzrokuje njihovu neaktivnost.
Kada uzrok hazarda nestane, procesor nastavlja izvoditi
naredbe na normalan nain.
28
623

Naredbe FRISC-a i strukturni hazard


Zbog Von Neumannove arhitekture memorijskog suelja,
sve memorijske naredbe procesora FRISC (LOAD,
STORE, LOADH, STOREH, LOADB, STOREB, PUSH, POP)
uzrokovat e strukturni hazard.
Te naredbe imati e fazu izvoenja koja se ne moe
preklapati s fazom dohvata sljedee naredbe te e
njihovo izvoenje efektivno trajati dva perioda. Zato
emo te naredbe svrstati u grupu dvociklusnih
naredaba.

29
624

Izvoenje memorijskih naredaba


Memorijske naredbe LOAD i STORE:
Naredba LOAD prilikom izvoenja mora proitati podatak iz
memorije, a naredba STORE ga mora upisati u memoriju (sve
isto vrijedi i za naredbe LOADH,LOADB, STOREH, STOREB)
Pristup memoriji pri izvoenju LOAD/STORE ne moe se odvijati
istodobno s dohvatom sljedee naredbe iz iste memorije
Zato se, nakon prepoznavanja naredbe LOAD/STORE,
onemoguuje rad razine dohvata u sljedeem ciklusu
(mjehuri) te e biti aktivna samo razina izvoenja
Na kraju izvoenja se zato omoguuje rad razine za dohvat u
sljedeem ciklusu
Meutim, za vrijeme tog (odgoenog) dohvata bit e neaktivna
razina za izvoenje (mjehuri prelazi iz razine dohvata u razinu
izvoenja), jer nema dohvaene naredbe koja bi se mogla
izvoditi
30
625

Primjer
Analizirajmo broj perioda potrebnih
programa za zbrajanje dva broja:
LOAD R0, (100)

Dohvat
T1

LOAD R1, (200)

T2

ADD R0,R1,R2

T4

STORE R2, (300)

T3

izvoenje
Izvoenje

LOAD R0, (100)

LOAD R0, (100)

LOAD R1, (200)

LOAD R1, (200)

T5

ADD R0,R1,R2

T6

STORE R2,(300)

T7

za

ADD R0,R1,R2

STORE R2,(300)

T=7

31
626

Dvociklusne naredbe: dohvat STORE


Prva polovica perioda:
Postavljanje adrese na adresnu sabirnicu PC

Druga polovica perioda *:


itanje naredbe
Dekodiranje naredbe
Dohvat adrese** i slanje prema ALU
Prosljeivanje adrese ili izraun adrese**
Postavljanje PC za sljedeu naredbu
onemogui dohvat u sljedeem ciklusu

AR

(AR)
IR
dekodiranje
(ext ALU) ili (Rx, ext ALU)
(ALU proslj.) ili (ALU zbraja)
PC+4 PC

*Ovi koraci izvode se u sluaju da je memorija dovoljno brza i da nije bio aktiviran
WAIT signal
** ovisno o nainu adresiranja u naredbi

32
627

Dvociklusne naredbe: dohvat STORE

DR

D[0..31]

SHUFFLER

IR

EXT

REG

SR

ALU

8
C

AR

PC

A[0..31]

33
628

Dvociklusne naredbe: izvoenje STORE


Prva polovica perioda:
Postavljanje adrese na adr.sabirnicu
Podatak na sab. podataka (uz shuffle)

ALU_OUT
AR
REG_B
DR

Druga polovica perioda *:


omogui dohvat u sljedeem ciklusu
*Ovi koraci izvode se u sluaju da je memorija dovoljno brza i da
nije bio aktiviran WAIT signal
Na WEB je stavljen ispravak opisa izvoenja naredbe
STORE iz knjige !!! (u knjizi je pogreno ALU_OUT AR
bilo napisano u ciklusu dohvata)

34
629

Dvociklusne naredbe: izvoenje

DR

D[0..31]

SHUFFLER

IR

EXT

REG

SR

ALU

8
C

AR

PC

A[0..31]

35
630

Primjer: STOREB R1, (R2+3ABC)

Razina dohvata:
Prva polovina periode CLOCK-a:
PC -> AR
Druga polovina periode CLOCK-a:
(AR) -> IR,
dekodiranje
ext 3ABC i R2 -> ALU
ALU: izvodi zbrajanje
PC +4 -> PC
onemogui dohvat u sljedeem ciklusu

Razina izvoenja:
Prva polovina periode CLOCK-a:
ALU -> AR
R1 -> DR
Druga polovina periode CLOCK-a:
omogui dohvat u sljedeem ciklusu

36
631

Primjer: LOAD R0, (R1+300)

Razina dohvata:
Prva polovina periode CLOCK-a:
PC -> AR
Druga polovina periode CLOCK-a:
(AR) -> IR,
dekodiranje
ext 300 i R1 -> ALU
ALU: izvodi zbrajanje
PC +4 -> PC
onemogui dohvat u sljedeem ciklusu

Razina izvoenja:
Prva polovina periode CLOCK-a:
ALU -> AR
Druga polovina periode CLOCK-a:
(AR) -> DR
DR -> R0
omogui dohvat u sljedeem ciklusu

37
632

Dvociklusne naredbe: dohvat PUSH


(Dohvat je slian kao i kod LOAD/STORE samo se za adresu uzima R7-4)
Prva polovica perioda:
Postavljanje adrese na adresnu sabirnicu PC

Druga polovica perioda *:


itanje naredbe
Dekodiranje naredbe
Dohvat adrese i slanje prema ALU
ALU
Postavljanje PC za sljedeu naredbu
onemogui dohvat u sljedeem ciklusu

AR

(AR)
IR
dekodiranje
R7, 4
ALU
ALU oduzimanje
PC+4
PC

*Ovi koraci izvode se u sluaju da je memorija dovoljno brza i da nije bio


aktiviran WAIT signal

38
633

Dvociklusne naredbe: izvoenje PUSH


(Dohvat je slian kao i kod LOAD/STORE samo se za adresu uzima R7-4)
Prva polovica perioda:
Postavljanje adrese na adr.sabirnicu
Osvjeavanje SP
Podatak na sab. podataka

ALU_OUT
AR
ALU_OUT
R7
REG_B
DR

Druga polovica perioda *:


omogui dohvat u sljedeem ciklusu
*Ovi koraci izvode se u sluaju da je memorija dovoljno brza i da nije bio
aktiviran WAIT signal

39
634

Izvoenje memorijskih naredaba


Memorijske naredbe PUSH i POP:
Prilikom izvoenja naredaba PUSH i POP takoer se pristupa
memoriji kao i kod naredba LOAD i STORE, pa se naredbe
izvode na slian nain
Dodatno, naredba PUSH smanjuje registar SP, a POP poveava
SP

DZ: Prouiti iz knjige nain izvoenja naredbe POP.


Razmisliti koje su razlike izmeu izvoenja LOAD I
STORE, te koje su razlike izmeu izvoenja POP i PUSH
Napredno gradivo: prouiti tablicu izvoenja svih
naredaba procesora FRISC (osim za prekide)
40
635

Upravljaki hazard
Drugi od tri ranije spomenuta hazarda je upravljaki
hazard. Ovaj hazard deava se kad naredba koja se
nalazi u protonoj strukturi i spremna je za izvoenje
nije naredba koja se u stvari treba izvesti
Ovaj hazard dogaa se kod izvoenja naredaba grananja
kad je procesor ve uitao sljedeu naredbu i pripremio
se za njeno izvoenje, ali zbog grananja program treba
nastaviti s izvoenjem naredbe na nekoj drugoj adresi
Zbog toga se ovaj hazard naziva jo i hazardom
grananja
Naredbe koje uzrokuju ovaj hazard kod FRISC-a su
upravljake naredbe
41
636

Primjer
0
4
8
C
10
14
18

SUB R0,R0,R0
JP_NZ 14
ADD R0, 2, R0
JP_NZ 18
OR R0,R0,R0
AND R0,R0,R0
XOR R0,R0,R0

Dohvat

Izvoenje

T1

SUB R0,R0,R0

T2

JP_NZ 14

SUB R0,R0,R0

T3

ADD R0, 2, R0

JP_NZ 14

T4

JP_NZ 18

ADD R0, 2, R0

T5

OR R0,R0,R0

JP_NZ 18

T6

XOR R0,R0,R0

T7

...

XOR R0,R0,R0

42
637

Uvjetna upravljaka naredba


uvjetna upravljaka naredba ponaa se kao
dvociklusna ako je uvjet zadovoljen (jer dolazi do pojave
hazarda i umee se mjehuri u protonu strukturu),
kada uvjet nije zadovoljen ponaa se kao jednociklusna

43
638

Izvoenje upravljakih naredaba


Specifinosti pojedinih upravljakih naredaba su:
Adresa skoka zadana je brojem ili registrom: zbrajanje nije
potrebno za izraun adrese skoka (za razliku od memorijskih
naredaba s indirektnim registarskim adresiranjem s
odmakom)
Izuzetak je naredba JR u kojoj je zadana relativna adresa
koja se pribraja registru PC, ali za to se ne koristi ALU, nego
zasebni sklop za zbrajanje koji postoji uz registar PC
Naredbe CALL i RET su specifine po tome to osim
promjene tijeka izvoenja zahtijevaju dodatni pristup
memoriji, tj. stogu (po tome su one sline naredbama PUSH i
POP)

44
639

Upravljake naredbe: dohvat JP


Prva polovica perioda:
Postavljanje adrese na adresnu sabirnicu PC

Druga polovica perioda *:


itanje naredbe
Dekodiranje naredbe
Ispitivanje UVJETA
Postavljanje PC za sljedeu naredbu
Ako je UVJET istinit onemogui dohvat u

AR

(AR)
IR
dekodiranje
PC+4
PC
sljedeem ciklusu

*Ovi koraci izvode se u sluaju da je memorija dovoljno brza i da


nije bio aktiviran WAIT signal

45
640

Upravljake naredbe: izvoenje JP


OVO SE IZVODI SAMO AKO JE UVJET BIO ISTINIT!
Prva polovica perioda:
- Nema aktivnosti
Druga polovica perioda:
Adresa skoka u PC
omogui dohvat u sljedeem ciklusu

adr

PC

46
641

Upravljake naredbe: JR
Dohvat i izvoenje isto kao i JP osim to se u periodu
izvoenja
PC+ext

PC

47
642

Upravljake naredbe: CALL, RET, HALT


Ove naredbe takoer su jednociklusne ako je zadan
uvjet za izvoenje i on nije istinit, a dvociklusne su ako
su bezuvjetne ili je zadani uvjet istinit
DZ: prouite iz knjige korake pri dohvatu i izvoenju
naredbe CALL

48
643

Primjer
Treba odrediti ukupno trajanje programa u ciklusima
START

ORG 0
MOVE 50, R0
SUB R0, 5, R0
CALL_Z PRIPR
PETLJA SUB R0, 1, R0
JR_NE PETLJA
CALL_Z PRIPR
HALT
PRIPR ADD R0, 5, R0
RET

49
644

Primjer
Treba odrediti ukupno trajanje programa u ciklusima
START

ORG 0
MOVE 50, R0
SUB R0, 5, R0
CALL_Z PRIPR
PETLJA SUB R0, 1, R0
JR_NE PETLJA
CALL_Z PRIPR
HALT
PRIPR ADD R0, 5, R0
RET

0 pseudonaredba !!!
1 x 1c
1 x 1c ( R0 = 4B = 7510 !!!)
1 x 1c (uvjet nije istinit!)
7510 x 1c
7410 x 2c + 1 x 1c = 14910 c
1 x 2c (uvjet istinit!)
1 x 2c
1 x 1c
1 x 2c

UKUPNO: 3c + (75x 3c -1c) + (2c + 3c) + 2c = 234 c

50
645

Podatkovni hazard
Podatkovni hazard javlja se kod izvoenja naredaba u
protonoj strukturi kada se naredba ne moe izvesti jer
podaci potrebni za njeno izvoenje jo nisu spremni
Kod FRISC-a nema pojave podatkovnog hazarda pa
emo primjer ovog hazarda prouiti kod procesora ARM

51
646

Cjelovit rad procesora


U prethodnim predavanjima prouili smo arhitekturu
puta podataka i prouili nain izvoenja naredaba
U nastavku emo ukratko objasniti na koji nain
funkcionira procesor kao cjelina, odnosno koja su naela
upravljanja sa svim dijelovima puta podataka
Prisjetimo se nakratko mikroarhitekture puta podataka
procesora FRISC

52
647

Put podataka procesora FRISC

Kako generirati
upravljake signale
potrebne za izvoenje
opisanih naredaba ?

Upravljaka jedinica

DR

D[0..31]

SHUFFLER

EXT

IR

REG

SR

ALU

8
C

AR

PC

A[0..31]

53
648

Upravljanje putom podataka


Kao to ste nauili u "Digitalnoj", jednostavan nain
generiranja upravljakih signala moe se postii strojem
s konanim brojem stanja (finite state machine - FSM)
Pri izvoenju naredaba treba generirati upravljake
signale na rastui i na padajui brid signala vremenskog
voenja clock
Klasini FSM generira signale na jedan od bridova
(rastui ili padajui) pa upravljaka jedinica FRISC-a
koristi dvostruki FSM

54
649

Upravljaka jedinica stroj s konanim brojem


stanja

Kombinacijski
sklop sljedeeg
stanja za
neparne
cikluse

Registar
neparnog
stanja

Kombinacijski
sklop sljedeeg
stanja za
parne
cikluse

Registar
parnog
stanja

clk

IZLAZNI KOMBINACIJSKI SKLOP

Ulazni
signali

Upravljaki
signali

55
650

Upravljaka jedinica stroj s konanim brojem


stanja

Kombinacijski
sklop sljedeeg
stanja za
neparne
cikluse

Registar
neparnog
stanja

Kombinacijski
sklop sljedeeg
stanja za
parne
cikluse

Registar
parnog
stanja

clk

IZLAZNI KOMBINACIJSKI SKLOP

Ulazni
signali

Upravljaki
signali

Prvi FSM zaduen je za generiranje svih signala u neparnim poluperiodima


56
651

Upravljaka jedinica stroj s konanim brojem


stanja

Kombinacijski
sklop sljedeeg
stanja za
neparne
cikluse

Registar
neparnog
stanja

Kombinacijski
sklop sljedeeg
stanja za
parne
cikluse

Registar
parnog
stanja

clk

IZLAZNI KOMBINACIJSKI SKLOP

Ulazni
signali

Upravljaki
signali

Drugi FSM zaduen je za generiranje svih signala u parnim poluperiodima


57
652

Upravljaka jedinica stroj s konanim brojem


stanja

Kombinacijski
sklop sljedeeg
stanja za
neparne
cikluse

Registar
neparnog
stanja

Kombinacijski
sklop sljedeeg
stanja za
parne
cikluse

Registar
parnog
stanja

clk

IZLAZNI KOMBINACIJSKI SKLOP

Ulazni
signali

Upravljaki
signali

Upravljaki signali generiraju se na temelju stanja oba stroja


58
653

Povezivanje raunala s okolinom

1
654

UI ureaji
Ureaji se nikada ne spajaju izravno na sabirnicu procesora (razlozi !!) ve preko
"ulaza i izlaza", tj. preko posebnih meusklopova namijenjenih upravo toj svrsi (oni
slue kao posrednici)
Ovakve meusklopove zovemo ulazno-izlaznim (UI) jedinicama (engl. IO unit) ili
vanjskim jedinicama (skraeno VJ)
Zadaa UI jedinice je oslobaanje procesora od uestale komunikacije s ureajem i
prilagodba naina komunikacije ureaja komunikaciji putem sabirnice raunala

CPU

MEM

Vanjska (UI)
jedinica

sabirnica

2
655

Povezivanje raunala s okolinom


Kakve sve mogu biti UI jedinice?
Moemo ih podijeliti prema smjeru prijenosa:
ulazne
izlazne
dvosmjerne

Moemo ih podijeliti prema namjeni:

za prijenos podataka
za brojanje impulsa
za mjerenje vremena
za generiranje impulsa
za AD i DA pretvorbu
specijalne namjene, itd.
3
656

Komunikacija procesora s UI
jedinicama

Kova, Basch, FER, Zagreb

6577

Naini adresiranja UI jedinica


Naelno, kod UI komunikacije postoje dvije operacije
kao i kod pristupanja memoriji:
itanje
pisanje
Na sabirnicu je spojen vei broj UI jedinica i procesor mora
tono odabrati onu jedinicu s kojom eli komunicirati - to se
radi pomou adresne sabirnice
Dva osnovna naina adresiranja UI jedinica su:
memorijsko UI preslikavanje (memory mapped IO)
izdvojeno UI adresiranje (isolated IO)

8
658

Memorijsko UI preslikavanje

LOGIKI ADRESNI PROSTOR

FIZIKI ADRESNI PROSTOR

FFFF FFFE
FFFF FFFF

. . . . . . . . . . . . . .

Za
memoriju i
UI-jedinice

. . . . . . . . . . . . . .

0000 0000
0000 0001
Memorija

UI jedinice
UI jedinice
9
659

Memorijsko UI preslikavanje
Memorijsko UI preslikavanje ima sljedee znaajke:
procesor na jednak nain pristupa memorijskim lokacijama
i UI jedinicama
sabirniki protokoli itanja i pisanja jednaki su za pristup
memoriji i UI jedinicama

10
660

Izdvojeno UI adresiranje

. . . . .

. . . . .

Za
memoriju

LOGIKI ADRESNI PROSTOR


0000 0000
0000 0001

FIZIKI ADRESNI PROSTOR

Memorija

FFFF FFFE
FFFF FFFF

FFFE
FFFF

. . .

. . .

Za
UI-jedinice

UI jedinice

0000
0001

UI jedinice

UI jedinice
11
661

Izdvojeno UI adresiranje
Izdvojeno UI adresiranje ima sljedee znaajke
procesor na razliite naine pristupa memoriji i UI jedinicama.
procesor ima posebne prikljuke kojima odreuje je li neka
adresa (npr. 10), koja se nalazi na adresnoj sabirnici,
namijenjena memoriji ili UI jedinici

12
662

Usporedba
Prednosti i nedostaci memorijskog i izdvojenog
adresiranja

13
663

Komunikacija FRISC-a s UI jedinicama


Za FRISC emo odabrati memorijsko preslikavanje:
bolje je prilagoeno RISC procesorima zbog vee jednostavnosti
(samo jedan sabirniki protokol i nepotrebne dodatne naredbe)
memorijski adresni prostor je vie nego dovoljan za nae potrebe
pa moemo jedan njegov dio odvojiti za UI jedinice
komunikacija s UI jedinicama odvija se pomou naredaba LOAD i
STORE budui da su to jedine naredbe koje pristupaju memoriji
umjesto adresa memorijskih lokacija, u naredbama LOAD i
STORE koristit e se adrese UI jedinica
u zadatcima i na labosima po dogovoru* uzimamo da je na
FRISC spojena memorija na adresama 0 do FFFF (64 kB), a
UI jedinice nalazit e se na adresama FFFF0000 do FFFFFFFF
(sve moemo dohvatiti 20-bitnom adresom)

14
664

Vrste UI prijenosa podataka


UI jedinice rade svojom brzinom koja je razliita (obino manja)
od brzine procesora
Prije prenoenja podataka, obino se procesor i UI jedinica trebaju
sinkronizirati, tj. uskladiti svoj rad da bi se prijenos podataka
uspjeno izveo
S obzirom na to, prijenos se moe dijeliti na:
programski prijenos
sklopovski prijenos

15
665

Programski prijenos
Glavne karakteristike programskog prijenosa su:
Prijenos se obavlja pod upravljanjem programa, tj. prijenos
obavlja procesor (upravljan programom)
Svi podatci koji se prenose "prolaze kroz procesor"
Programski prijenos je sporiji od sklopovskog prijenosa
Procesor dio vremena troi na prijenos podataka to usporava
izvoenje ostalih poslova
U nastavku emo vidjeti tri vrste programiranog prijenosa:
bezuvjetni
uvjetni
prekidni

16
666

Sklopovski prijenos
Glavne karakteristike sklopovskog prijenosa su:
prijenos se obavlja pod upravljanjem specijaliziranog
sklopovlja, tj. prijenos obavlja specijalna jedinica (DMA
kontroler), a procesor ne sudjeluje u prijenosu
podatci koji se prenose prolaze kroz specijalnu jedinicu, a
ovisno o njenoj grai i organizaciji mogue je ak i da se
prenose izravno izmeu UI jedinice i memorije
prijenos se openito odvija velikim brzinama
procesor ne troi vrijeme na prijenos podataka, ali izvoenje
programa je ipak usporeno za vrijeme obavljanja
prijenosa
na kraju ovog poglavlja emo vidjeti jednu vrstu sklopovskog
prijenosa:
izravni pristup memoriji (DMA)
17
667

Bezuvjetni prijenos

Kova, Basch, FER, Zagreb

18
668

Bezuvjetni prijenos
Bezuvjetni prijenos je najjednostavnija vrsta prijenosa
Glavna znaajka je da se prije prijenosa ne provjerava je li
UI jedinica spremna za prijenos podataka
nema sinkronizacije brzine rada izmeu procesora i UI
jedinice
Dijagram toka je trivijalan i sastoji se samo od prijenosa:
PRIJENOS

Prijenos je jedna naredba (eventualno vie njih) za itanje iz


VJ ili za pisanje u VJ

19
669

Bezuvjetni prijenos
UI jedinica je sklopovski najjednostavnija
Najbri prijenos meu programiranim prijenosima
Nedostatak je mogunost da UI jedinica nije spremna
za prijenos

20
670

Bezuvjetni prijenos
Kad moemo koristiti bezuvjetni prijenos?
Openito:
kad nam nije bitna sinkronizacija
kad znamo da neemo pristupati UI jedinici bre nego to
ona radi

Na primjer: elimo oitati trenutanu vrijednost


temperature u prostoriji preko temperaturnog senzora
Na primjer: elimo svake sekunde osvjeiti prikaz
vremena na zaslonu (npr. na 7-segmentnom LCD-u)

21
671

Bezuvjetna VJ

Bezuvjetna VJ

adr
data
Upravljaki Upravljaki
dio
dio

registar

proces

rd

wr

22
672

Osnovna graa bezuvjetne VJ


Sve nae VJ zauzimat e odreeni broj uzastopnih
lokacija (jednu ili vie njih)
Zbog jednostavnosti, sve ove lokacije e biti 32-bitne pa
emo s VJ komunicirati koritenjem naredaba LOAD i
STORE
Dakle, svaka lokacija e zauzimati 4 adrese

Bezuvjetna VJ zauzima samo jednu lokaciju

23
673

Bezuvjetna VJ
Arhitektura jednostavne izvedbe bezuvjetne izlazne VJ

Adresni
dekoder

adr[31:2]

wr
data[31:0]

clk

registar

Prema
procesu/
vanjskom
ureaju

24
674

Bezuvjetna VJ
Arhitektura jednostavne izvedbe bezuvjetne ulazne VJ
Adresni
dekoder

adr[31:2]

rd
data[31:0]

clk

registar

Iz
procesa/
vanjskog
ureaja

25
675

Bezuvjetni prijenos - Primjeri


Na bezuvjetnu izlaznu VJ0 na adresi FFFF0000 spojen je
relej. Slanjem broja 0 relej se iskljuuje, a slanjem 1 se
ukljuuje. Na bezuvjetnu ulaznu VJ1 na adresi FFFF 0010
spojena je tipka. Kad je tipka pritisnuta, s VJ se oitava
stanje 1, a kad tipka nije pritisnuta, oitava se stanje 0.
Napisati program koji treba ispitivati je li tipka pritisnuta i
samo tada drati relej ukljuen. Graa VJ0 i VJ1 je kao u
prethodnom opisu.

26
676

Bezuvjetni prijenos - Primjeri


RELEJ EQU

0FFFF0000

TIPKA EQU

0FFFF0010

; Definiranje naziva VJ

Glavni program

PETLJA

LOAD

R0, (TIPKA)

OR

R0, R0, R0

JR_Z

ISKLJUCI

UKLJUCI MOVE

1, R0

STORE R0, (RELEJ)


JR

ISKLJUCI MOVE

PETLJA

0, R0

STORE R0, (RELEJ)


JR

PETLJA
677

Bezuvjetni prijenos - Primjeri


Na bezuvjetnu ulaznu vanjsku jedinicu na adresi FFFF0000
spojen je digitalni termometar s kojeg se moe oitati
trenutna vrijednost temperature. Vanjska jedinica graena
je kao to je pokazano na prethodnim slikama.
Program mora svakih 5 minuta oitati temperaturu,
izraunati srednju vrijednost svih dotadanjih temperatura i
spremiti je u lokaciju SR_TEMP. Nakon tri sata treba
zaustaviti procesor. Pretpostavite da ve postoji
potprogram za dijeljenje (DIJELI) kojem su parametri u
fiksnim memorijskim lokacijama SUMA i BROJ_OCITANJA a
rezultat se vraa registrom R0.
Pretpostavka je da se vrijednost temperature vraa u niih
8 bitova, a gornjih 24 bita su nule, te da procesor radi sa
signalom vremenskog voenja clock frekvencije 10 MHz.
28
678

Definiranje adrese vanjske jedinice

TERMOMET EQU
;

0FFFF0000

Glavni program
MOVE

10000, R7

; Inicijalizacija varijabli

PETLJA

MOVE

0, R0

STORE

R0, (SUMA)

STORE

R0, (BROJ_OCITANJA)

STORE

R0, (SR_TEMP)

MOVE

%D 36, R1

; broja za 3 sata: 36*5 min = 3 sata

LOAD

R0, (TERMOMET) ; Uitaj temperaturu

CALL

RACUNAJ_SREDNJU ;Izraunaj i spremi

STORE R0, (SR_TEMP)


CALL

KASNI_5_MINUTA

SUB

R1, 1, R1

;srednju temperat.

; Istekla 3 sata?

JR_NZ PETLJA
HALT

679

; Potprogram za izraun sredine:


RACUNAJ_SREDNJU ; Parametar R0: nova temperatura
; Rezultat u R0
PUSH

R1

LOAD

R1, (SUMA)

ADD

R0, R1, R1

STORE R1, (SUMA)


LOAD

R1, (BROJ_OCITANJA)

ADD

R1, 1, R1

STORE R1, (BROJ_OCITANJA)


CALL

DIJELI

POP

R1

RET

680

; Potprogram za (priblino) 5-minutno kanjenje


; Nema parametara ni rezultata
KASNI_5_MINUTA

LOOP

PUSH

R0

LOAD

R0, (KONST)

; 109 prolazaka

SUB

R0, 1, R0

; 1 takt

JR_NZ LOOP
POP

; 2 takta

R0

RET
KONST

DW

%D 1000000000

; Ovaj potprogram napisan je za CLOCK frekvencije 10 MHz:


; 5 min = 300 s = 300*10*106 taktova

= 3*109 taktova

; Varijable
SUMA

DW 0

BROJ_OCITANJA

DW 0

SR_TEMP

DW 0

681

Uvjetni prijenos

Kova, Basch, FER, Zagreb

33
682

Uvjetni prijenos
Uvjetni prijenos rjeava probleme gubitka i
uviestruenja podataka kod bezuvjetnog prijenosa
Glavna znaajka je da se prije prijenosa uvijek
provjerava je li VJ spremna za prijenos podataka

Je li
UI jedinica
spremna
?

NE

DA
PRIJENOS

34
683

Uvjetni prijenos
Glavni nedostatak uvjetnog prijenosa:
Budui da je procesor tipino puno bri od vanjskih
ureaja, moe se dogoditi da procesor puno vremena
gubi na ekanje da VJ postane spremna
Uvjetna VJ je sklopovski sloenija od bezuvjetne VJ:
VJ mora imati stanje spremnosti koje se pamti u
bistabilu stanja (u tzv. status-bistabilu)
VJ mora imati dodatne sinkronizacijske prikljuke
za povezivanje s vanjskim ureajem

35
684

Uvjetni prijenos
Kad moemo koristiti uvjetni prijenos?
Openito:
kad nam je bitno da nema gubitaka/uviestruenja
podataka (tj. bitna nam je sinkronizacija)
kad ne znamo kojom brzinom emo pristupati VJ pa se
moe dogoditi da ona jo nije spremna

Na primjer: elimo slati znakove na pisa (naravno, pri


tome je bitno da svi znakovi budu primljeni i ispisani)
Na primjer: elimo itati niz podataka koji od nekuda
(npr. s mree ili iz tipkovnice) pristiu na VJ i koje sve
elimo bez gubitaka pohraniti u memoriju
36
685

Osnovna graa uvjetne UI jedinice

Uvjetna VJ
sinkronizacija
adr

proces

data
Upravljaki Upravljaki
dio
dio

registar

rd

wr

Bistabil
stanja

686

Vremenski dijagram uvjetne izlazne


komunikacije
IZLAZNA VJ
data[31:0]
REG
READY
STROBE

BS

1
Procesor
ispituje
spremnost

Procesor
sprema
podatak u
VJ

Brisanje
spremnosti

Proces
javlja da je
proitao
Vanjski
proces ita
podatak

VJ je
ponovo
spremna

38
687

Vremenski dijagram uvjetne ulazne


komunikacije
ULAZNA VJ
Podaci iz procesa
REG

data[31:0]
READY
STROBE

BS

2
1
Vanjski
proces
postavlja
podatak

Proces
javlja VJ
da je
podatak
spreman

VJ pamti
podatak i
javlja da je
spremna

6
5
Procesor
ispituje
spremnost

Proces vie
ne mora
drati
podatak

7
Brisanje
spremnosti

Procesor
ita
podatak

39
688

Uvjetni prijenos - rekapitulacija

Iz prethodnih opisa vidi se da je uvijek vrijedi:

Dok je VJ spremna za komunikaciju s procesorom, nije spremna za


komunikaciju s vanjskim procesom (i obrnuto)

Bistabil stanja slui za sinkronizaciju izmeu VJ i procesora:

Procesor programski ispituje b.stanja da bi utvrdio spremnost VJ


VJ postavlja bistabil stanja kad postane spremna
Bistabil stanja brie se (programski ili automatski) nakon
obavljenog prijenosa

Brisanjem bistabila stanja, omoguuje se nastavak


komunikacije s vanjskim procesom

Sinkronizacijski prikljuci slue za sinkronizaciju izmeu VJ i


vanjskog procesa:

Vanjski proces sklopovski ispituje sinkronizacijske prikljuke


bi utvrdio spremnost VJ

da

40
689

Osnovna graa uvjetne UI jedinice


Ovakva vanjska jedinica zauzimat e dvije uzastopne
32-bitne lokacije
Na prvoj lokaciji se ita ili pie podatak
Na drugoj lokaciji se pristupa bistabilu stanja
Na lokaciji za bistabil stanja moe se:
Proitati trenutani sadraj bistabila (ispitivanje
stanja)
Obrisati bistabil (operacijom upisa bilo kojeg podatka
- poslani podatak se zanemaruje) *

* Za nae uvjetne UI jedinice emo pretpostavljati da se bistabil stanja uvijek mora


brisati programski (tj. pretpostavljamo da se to ne radi automatski)
41
690

Arhitektura izlazne uvjetne VJ


Pojednostavljeni prikaz upravljakog dijela izlazne
uvjetne VJ
Adresni
dekoder
A
adr[31:2]

A+4
BS

S Q
R

wr
clk

rd

Prema
procesu/
vanjskom
ureaju

data[0]
data[31:0]

registar

42
691

Uvjetni prijenos - Primjeri


Napiite program koji e na uvjetnu vanjsku jedinicu
(graenu kao to je upravo opisano) koja se nalazi na
adresi 0FFFF0000 poslati 200 32-bitnih podataka koji se
nalaze u memoriji od lokacije PODACI. Nakon to su svi
podaci poslani, treba zaustaviti procesor.

43
692

Definiranje adresa vanjske jedinice

REG EQU

0FFFF0000

BS EQU

0FFFF0004

Glavni program
; Inicijalizacija varijabli

CEKAJ

MOVE

PODACI, R0

MOVE

%D 200,

R1

; adresa podataka
; broja petlje

LOAD

R2, (BS); itaj stanje iz VJ

OR

R2, R2, R2

; postavi zastavice

JR_Z

CEKAJ

; ispitaj stanje VJ

SPREMNA LOAD

R2, (R0)

; itaj podatak iz mem.

STORE R2, (REG); alji podatak u VJ


STORE R2, (BS); brii stanje VJ
ADD

R0, 4, R0

SUB

R1, 1, R1

JR_NZ CEKAJ
HALT

PODACI DW

12, 5452, 331A3, ...


693

Posluivanje vie uvjetnih vanjskih


jedinica
Ako su jedinice zavisne,
onda moramo za svaku
ekati da postane spremna
Zavisne jedinice znae da je
redoslijed njihovog
posluivanja bitan
Na slici je primjer gdje se
podatak primljen od VJ1
prenosi na VJ2

VJ1
spremna
?

NE

DA
Poslui VJ1

VJ2
spremna
?

NE

DA
Poslui VJ2
45
694

Uvjetni prijenos dvije VJ


Na FRISC su spojene dvije uvjetne vanjske jedinice: ulazna
vj1 na adresi FFFF1000 te izlazna vj2 adresi FFFF2000.
FRISC treba prenijeti 30 podataka sa VJ1 na VJ2 nakon
ega nastavlja s izvoenjem glavnog programa.

UVJETNA

VJ 1

30 x

FRISC

UVJETNA

VJ 2
46
695

Definiranje adresa vanjskih jedinica

PRIMI_1

EQU

0FFFF1000

BS_1

EQU

0FFFF1004

SALJI_2

EQU

0FFFF2000

BS_2

EQU

0FFFF2004

; Glavni program
MOVE
CEKAJ_1

CEKAJ_2

30,

R3

; broja podataka

LOAD

R0, (BS_1)

OR

R0, R0, R0

JR_Z

CEKAJ_1

; ekaj da VJ1 postane spremna

LOAD

R1, (PRIMI_1)

; Poslui VJ1

STORE

R0, (BS_1)

LOAD

R0, (BS_2)

OR

R0, R0, R0

JR_Z

CEKAJ_2

; ekaj da VJ2 postane spremna

STORE

R1, (SALJI_2)

; Poslui VJ2

STORE

R0, (BS_2)

SUB

R3, 1, R3

JR_NZ

CEKAJ_1

; Ispitaj je li preneseno svih 30 podataka


696

Posluivanje vie uvjetnih vanjskih


jedinica

Ako imamo vie nezavisnih


uvjetnih vanjskih jedinica, onda
moemo primijeniti postupak
prozivanja (eng. polling)
Nezavisne jedinice znae da jedna
ne ovisi o drugoj, tj. da redoslijed
posluivanja nije bitan
Prozivanje umanjuje nedostatak
uvjetnog prijenosa: ekanje na
spremnost pojedine vanjske jedinice
Vea je vjerojatnost da e
jedna od nekoliko jedinica
postati spremna
Nakon posluivanja jedne jedinice
prelazi se na sljedeu jedinicu
Ne bi bilo dobro vratiti se na
ispitivanje prve zbog mogueg
"izgladnjivanja" zadnjih jedinica
u lancu ispitivanja

VJ 1
spremna
?

DA

Poslui VJ 1

NE

VJ 2
spremna
?

DA

Poslui VJ 2

NE

VJ 3
spremna
?

DA

Poslui VJ 3

NE

48
697

Uvjetni prijenos primjer


Na FRISC su spojene dvije uvjetne vanjske jedinice: vj1 na
adresi FFFF1000 i vj2 adresi FFFF2000.
Obje jedinice rade neovisno i FRISC im alje 2000 podataka
smjetenih od adrese PODACI. Kako koja jedinica postane
spremna tako joj se poalje podatak (to znai da bra
jedinica prima vie podataka).
Kada je zavren prijenos svih 2000 podataka, treba
zaustaviti procesor.

Memo- 2000 x
rija

VJ 1
FRISC

UVJETNE

VJ 2
49
698

Definiranje adresa vanjskih jedinica

SALJI_1

EQU

0FFFF1000

BS_1

EQU

0FFFF1004

SALJI_2

EQU

0FFFF2000

BS_2

EQU

0FFFF2004

; Glavni program
MOVE

10000, R7

MOVE

2000,

MOVE

PODACI, R2

R1

; broja podataka
; adresa podataka

; POSTUPAK PROZIVANJA

PROZIVAJ

LOAD

R0, (BS_1)

OR

R0, R0, R0

CALL_NZ SALJI_VJ1

OR

R1, R1, R1

JR_Z

KRAJ

LOAD

R0, (BS_2)

OR

R0, R0, R0

CALL_NZ SALJI_VJ2

KRAJ

OR

R1, R1, R1

JR_NZ

PROZIVAJ

HALT

699

SALJI_VJ1 LOAD

R0, (R2)

; podatak iz memorije

STORE R0, (SALJI_1) ; alji podatak


STORE R0, (BS_1) ; brii spremnost
ADD

R2, 4, R2

; pomakni pokaziva

SUB

R1, 1, R1

; smanji broja

RET

; potprogram za posluivanje vj2, isto kao i za VJ1


SALJI_VJ2 LOAD

R0, (R2)

STORE R0, (SALJI_2)


STORE R0, (BS_2)
ADD

R2, 4, R2

SUB

R1, 1, R1

RET

700

Posluivanje vie VJ - Komentar


Naelno, kod posluivanja vie vanjskih jedinica treba odrediti
redoslijede itanja/pisanja u ovisnosti o samim jedinicama:
Uvjetnim VJ treba uvijek ispitati spremnost i posluiti ih im se
ustanovi da su spremne
Ako su uvjetne VJ nezavisne, onda ih se proziva
Ako su uvjetne VJ zavisne, onda se mora ekati da postanu
spremne
Bezuvjetne VJ treba itati/pisati tek kad zatreba.
Nema smisla npr. proitati podatak s bezuvjetne, a onda
ekati da uvjetna postane spremna kako bi joj poslali taj
podatak.
Treba pokuati raditi s "najsvjeijim" podatcima: npr. ekati da
uvjetna postane spremna i tek onda proitati podatak s
bezuvjetne i odmah ga poslati uvjetnoj
52
701

Prekidni prijenos

702

Prekidni prijenos

Glavna znaajka prekidnog prijenosa je da UI jedinica samostalno


dojavljuje svoju spremnost procesoru koji za to vrijeme normalno izvodi
neki program
Spremnost se dojavljuje zahtjevom za prekid (engl. interrupt request)

Glavni program

Zahtjev za
prekid od VJ

Prekidni potprogram
za posluivanje VJ
Glavni program
(nastavak izvoenja)

Iz dijagrama toka vidi se da zahtjev za prekidom (ili krae prekid) moe


doi u bilo kojem trenutku izvoenja glavnog programa
2
703

Prekidni prijenos
Prekidni prijenos rjeava:
problem gubitka i uviestruenja podataka (koji postoji kod
bezuvjetnog prijenosa)
gubitka vremena na ekanje spremnosti (koji postoji kod
uvjetnog prijenosa)
Prekidni prijenos je uinkovitiji od uvjetnog (u smislu koliine
dodatnog posla kojeg procesor u jedinici vremena moe obaviti uz
komunikaciju s VJ), ali ipak nije tako uinkovit kao bezuvjetni (zato
to se vrijeme se troi na prihvaanje zahtjeva za prekid, odlazak u
prekidni potprogram i povratak iz prekidnog potprograma)
Prekidna jedinica graena je slino uvjetnoj, ali je ipak neto
sloenija
Prekidni prijenos koristimo u istim sluajevima kad i uvjetni, ali kad
nam je vano da procesor moe izvoditi neki program bez usporenja
zbog ekanja spremnosti VJ
3
704

Prekidni sustavi procesora


Prekidni sustavi jako se razlikuju od procesora do procesora
zato neemo objanjavati sve mogue varijante prekidnih sustava
orijentirat emo se na konkretni prekidni sustav procesora FRISC
(i kasnije procesora ARM)

Prekidni sustav definira sljedee:

koliko prekidnih prikljuaka procesor ima i koji su im prioriteti


kako procesor potvruje UI jedinici da je prihvatio zahtjev za prekid
kako se odreuje adresa prekidnog potprograma
moe li se prekidni potprogram ponovno prekinuti i kako
kako se prepoznaje UI jedinica koja je izazvala prekid
kako se procesoru moe dozvoliti ili zabraniti prihvaanje prekida
kako jedinica zna da je njeno posluivanje dovreno
kako se obavlja poziv i povratak iz prekidnog potprograma

4
705

Prekidni sustavi procesora


Naelno ponaanje procesora s obzirom na prekide:
1. Procesor izvodi program, a VJ postavlja zahtjev za prekid
2. Procesor izvodi trenutnu naredbu do kraja, tj. ispituje ima li
zahtjeva za prekid tek na kraju izvoenja naredbe
3. Ako je u procesoru dozvoljeno prihvaanje postavljenog prekida,
onda procesor prihvaa prekid, a u suprotnom nastavlja s
radom
4. Prihvaanje prekida sastoji se od:
1. Procesor zabranjuje prihvaanje daljnjih prekida (osim
eventualno prekida jaeg prioriteta ako ih podrava)
2. Procesor odreuje adresu prekidnog potprograma
3. Procesor pohranjuje registar PC, a esto i registar stanja
(moe pohranjivati i druge registre)
4. Procesor skae u prekidni potprogram
5
706

Prekidni sustavi procesora

Naelno ponaanje prekidnog potprograma (skraeno p.p.):


1. Sprema se kontekst (sve registre koje potprogram mijenja, a nisu
automatski spremljeni prilikom prihvaanja prekida)
2. Otkriva se uzronik prekida (ako ih ima vie), tj. otkriva se koja VJ je
izazvala prekid *
3. Dojavljuje se VJ da je njen prekid prihvaen (VJ mora ukloniti zahtjev
za prekid) *
4. Posluuje se VJ
5. Obnavljanje konteksta
6. Ponovno dozvoljavanje prekida **
7. Dojavljuje se VJ da je njezin prekid obraen (VJ moe nastaviti s
radom, ponovno postati spremna i zahtijevati prekid) **, ***
8. Izlazak iz prekidnog potprograma i povratak u glavni program na
mjesto gdje je bio prekinut

* ovisno o procesoru moe se izvesti sklopovski


** ovisno o procesoru moe se izvesti sklopovski prilikom koraka 8
*** ovaj korak ne postoji kod svih procesora
6
707

Prekidni sustav procesora FRISC

Kova, Basch, FER, Zagreb

7087

Prekidni sustav FRISC-a

Prekidni prikljuci FRISC-a su na sabirnici int[1:0]


int[0]
int[1]

- maskirajui prekid (oznaava se i s INT)


- nemaskirajui prekid (oznaava se i s NMI)

Maskirajui prekid (maskable interrupt) moemo programski zabraniti ili


onemoguiti (maskirati). Ovdje se radi o dozvoljavanju ili zabranjivanju
prihvaanja prekida od strane procesora (ne o dozvoljavanju ili
zabranjivanju postavljanja zahtjeva od strane VJ)
Nemaskirajui prekid (nonmaskable interrupt) ne moemo ga zabraniti
Nemaskirajui prekid je vieg prioriteta od maskirajueg
Maskirajui prekid je inicijalno zabranjen (nemaskirajui je, naravno,
dozvoljen)

8
709

Prekidni sustav FRISC-a


Prekid se maskira pomou prekidne zastavice GIE (global
interrupt enable) u registru stanja SR:

GIE
0: prihvaanje maskirajueg prekida zabranjeno
1: prihvaanje maskirajueg prekida dozvoljeno

9
710

Prekidni sustav FRISC-a


FRISC ima zastavicu IIF (internal interrupt flag) koja
nije u registru SR:
ova zastavica nije dostupna programeru, a koristi se kod
nemaskirajueg prekida NMI
poetno stanje IIF je 1
dok se ne obrauje NMI, IIF je u stanju 1
im se prihvati NMI, IIF se automatski prebacuje u stanje 0
IIF se automatski vraa u stanje 1 po povratku iz NMI
dok se obrauje NMI (na temelju stanja IFF=0):
novi zahtjev NMI se ne prihvaa
zahtjevi sa INT se ne prihvaaju

10
711

Prekidni sustav FRISC-a


Ispitivanje prekida kod FRISC-a:
Postojanje prekida ispituje se na kraju perioda CLOCK-a (moe
se rei i na padajui brid CLOCK-a)
Naredba koja je u razini izvoenja se izvodi do kraja
Ispitivanje i prihvaanje prekida ovisi o stanju zastavica i
trenutanim zahtjevima za prekid:
Ako je IIF=0, prekidi se ne prihvaaju
U suprotnom, ako je NMI prisutan, on se prihvaa, a ako
NMI nije prisutan, onda se ispituju maskirajui prekidi
Ako je GIE=0, maskirajui prekid se ne prihvaa
U suprotnom se maskirajui prekid prihvaa

11
712

Prekidni sustav FRISC-a


Prihvaanje nemaskirajueg prekida kod FRISC-a:
Brie se IIF (zabranjivanje svih daljnjih prekida)
Sprema se PC na stog
Skok u prekidni potprogram na adresi C16 (C16  PC)
Komentari:
Dojava VJ da je prihvaen zahtjev za prekid obavlja se programski
Prekidni potprogram mora biti uvijek na memorijskoj adresi 1210 (tj.
0C16)

12
713

Prekidni sustav FRISC-a


Prihvaanje maskirajueg prekida kod FRISC-a:
Brie se GIE (zabranjivanje daljnjih maskirajuih
prekida)
Sprema se PC na stog
Dohvat adrese prekidnog potprograma (tzv.
prekidnog vektora) s memorijske lokacije na adresi 8 i
skok u prekidni potprogram, tj. (8)  PC
Komentari:
dojava o prihvaanju prekida programski u prekidnom potprogramu
Prekidni vektor omoguuje postavljanje prekidnog potprograma na bilo
koju adresu u memoriji, ali zahtijeva jedan ciklus itanja vie za dohvat
prekidnog vektora. Prekidni vektor mora biti zapisan na adresi 8
13
714

Prekidni potprogram FRISC-a


1. Sprema se kontekst (registre koje potprogram mijenja)
2. Otkriva se uzronik prekida (ako ih ima vie), tj. otkriva se koja
VJ je izazvala prekid
3. Dojavljuje se VJ da je njen prekid prihvaen
4. Posluuje se VJ
5. Obnavljanje konteksta
6. Dojava VJ da je njezin prekid obraen
7. Povratak iz potprograma s dozvoljavanjem prekida
naredbom RETI za maskirajui
naredbom RETN za nemaskirajui
* Koraci 5. i 6. mogu se izvesti i u obratnom redoslijedu

14
715

Prekidni sustav FRISC-a


Naredbe za povratak iz potprograma rade kao i obian RET,
ali dodatno dozvoljavaju prekid koji je FRISC bio automatski
zabranio kod prihvaanja prekida (drugim rijeima, obnavljaju
stanje prekidne zastavice GIE odnosno IIF):

Za maskirajui prekid je prije prihvaanja prekida vrijedilo


GIE=1, a u trenutku prihvaanja maskirajueg prekida se GIE
automatski obrie
RETI (RETurn from maskable Interrupt) obnavlja stanje GIE=1
Za nemaskirajui prekid je prije prihvaanja prekida vrijedilo
IIF=1, a u trenutku prihvaanja nemaskirajueg prekida se IIF
automatski obrie
RETN (RETurn from Nonmaskable interrupt) obnavlja stanje IIF=1

15
716

16
717

Osnovna graa prekidne UI jedinice


Najjednostavnija graa ope prekidne UI jedinice moe
se prikazati sljedeom blok shemom (sve je slino kao
kod uvjetne UI jedinice)
Prekidna VJ
sinkronizacija
adr

proces

data
Upravljaki Upravljaki
dio
dio

registar

rd

wr

int

Bistabil
stanja

718

Osnovna graa prekidne UI jedinice


Prekidna VJ moe biti spremna ili nespremna kao i uvjetna VJ:
Uvjetna VJ je "pasivna": procesor treba ispitivati spremnost to
znai da je cijeli tijek prijenosa pod upravljanjem programa
Prekidna VJ je "aktivna": kad postane spremna, sama od
procesora zahtijeva posluivanje, postavljajui zahtjev za prekid.
Prekidnoj VJ se programski moe zabraniti ili dozvoliti da postavlja
prekid kad postane spremna (to je razliito od dozvoljavanja i
zabranjivanja prihvaanja prekida u procesoru)
Obino VJ kojoj se zabrani postavljanje prekida i dalje normalno
radi te je se moe posluivati kao uvjetnu VJ
Zabranjivanje postavljanja prekida ima uinak zaustavljanja VJ u
prekidnom nainu rada

18
719

Osnovna graa prekidne UI jedinice


Nakon to bistabil stanja postane 1 (kad VJ postane
spremna), automatski se postavlja zahtjev za prekid (uz
pretpostavku da je dozvoljeno postavljanje prekida - u
suprotnom bistabil stanja ne utjee na stanje prekidnog
prikljuka)
Brisanje bistabila stanja:

uklanja zahtjev za prekid pa ima ulogu dojave o prihvaanju


zahtjeva za prekid (radi se na poetku prekidnog potprograma)
ne omoguava nastavak komunikacije s vanjskim
procesom (za razliku od brisanja bistabila stanja kod uvjetne
jedinice)

Nastavak komunikacije s vanjskim procesom mogu je tek


nakon to se VJ dojavi da je njen prekid obraen

to znai da tek nakon toga VJ moe ponovno postati spremna i


postaviti novi prekid (radi se na kraju prekidnog potprograma)

19
720

Osnovna graa prekidne UI jedinice


Prekidna VJ zauzimat e etiri uzastopne 32-bitne lokacije (*
kod konkretnih VJ raspored moe biti drugaiji):
Na prvoj lokaciji se ita ili pie podatak
Na drugoj lokaciji se pristupa bistabilu stanja:

ita se trenutani sadraj bistabila (ispitivanje stanja)


Brie se bistabil operacijom upisa bilo kojeg podatka (poslani
podatak se zanemaruje)

Na treoj lokaciji se upisom bilo kojeg podatka (poslani


podatak se zanemaruje) dojavljuje da je prekid obraen
Pomou etvrte lokacije upravlja se postavljanjem prekida:

Upis 0 zabranjuje, a upis 1 dozvoljava postavljanje zahtjeva za


prekid
itanje vraa trenutanu o(ne)moguenost postavljanja prekida
Inicijalno emo pretpostaviti da je dozvoljeno postavljanje
zahtjeva za prekid

20
721

Vrem. dijagram za izlaznu prekidnu VJ


IZLAZNA PREKIDNA VJ
data[31:0]

REG
READY
STROBE
BS
int

Procesor
Procesor
Proces
prihvaa
javlja kraj
javlja da je
prekid (ili
posluivanja
proitao
brie BS)
Procesor
Vanjski
VJ je ponovo
sprema
proces ita
spremna i
podatak u
podatak
generira
VJ
prekid

21
722

Vrem. dijagram za ulaznu prekidnu VJ


ULAZNA PREKIDNA VJ
Podaci iz procesa

REG
data[31:0]

READY
STROBE
BS
int

1
Vanjski
proces
postavlja
podatak

Proces
javlja VJ
da je
podatak
spreman

VJ pamti
podatak i
generira
prekid

5
Procesor
prihvaa
prekid (ili
brie BS)

Proces vie
ne mora
drati
podatak

7
Procesor
javlja kraj
posluivanja

Procesor
ita
podatak

22
723

Prekidni prijenos - Primjeri


FRISC treba primiti 10016 podataka od prekidne VJ spojene
na NMI. Adresa VJ je FFFF3000. Primljene podatke treba
spremati u memorijski blok podataka na adresi 1000, samo
ako su pozitivni.
Nakon primitka svih podataka treba zaustaviti rad VJ i rad
programa.

23
724

VJ_DATA EQU

0FFFF3000

VJ_STAT EQU

0FFFF3004

VJ_IEND EQU

0FFFF3008

VJ_STOP EQU

0FFFF300C

ORG

MOVE

10000, R7

; poetak izvoenja

JP

GLAVNI

; skoi na poetak glavnog programa

ORG

0C

PUSH

R0

PUSH

R1

MOVE

SR,R0

PUSH

R0

; adresa p.p. za NMI


; spremi kontekst

STORE R0,(VJ_STAT) ; brii BS (dojavi prihvaanje prekida)

SPREMI

LOAD

R0,(ADR_PODAT)

LOAD

R1,(VJ_DATA) ; primi podatak i...

OR

R1,R1,R1

JR_M

NEMOJ

STORE R1,(R0)
ADD

;...ako je pozitivan
;...spremi ga u blok...

R0,4,R0

STORE R0,(ADR_PODAT)
725

NEMOJ

LOAD

R0,(BROJAC)

; provjera brojaa...

SUB

R0,1,R0

;... primljenih podataka

STORE R0,(BROJAC)
JR_NZ VAN

STOP

;ima jos podataka->VAN

STORE R0,(VJ_STOP) ;zaustavi VJ i procesor


MOVE

1,R0

STORE R0,(PROC_HALT)

VAN

STORE R0,(VJ_IEND) ; dojavi kraj posluivanja

POP

R0

MOVE

R0,SR

POP

R1

POP

R0

RETN

PROC_HALT DW

; obnova konteksta

; povratak i IIF=1

; oznaka za glavni program


; 0 = nastavi rad, 1 = zaustavi procesor

BROJAC

DW

100

; broja prenesenih podataka

ADR_PODAT

DW

1000 ; adresa za spremanje u blok


726

GLAVNI
PETLJA

LOAD R0,(PROC_HALT) ; "koristan posao"


OR

R0,R0,R0

JR_Z PETLJA

; nastavi ako je 0

HALT

727

Prekidni prijenos - Primjeri


FRISC treba poslati 10016 16-bitnih podataka iz bloka
memorije na adresi 1000 na prekidnu VJ na adresi
FFFF0000. VJ je spojena na INT. Nakon prijenosa cijelog
bloka treba zaustaviti rad prekidne VJ, a glavni program
treba nastaviti s radom.

27
728

SEND

EQU

0FFFF0000

IACK

EQU

0FFFF0004

IEND

EQU

0FFFF0008

STOP

EQU

0FFFF000C

ORG

MOVE

10000, R7

; poetak izvoenja

JP

GLAVNI

; preskakanje vektora

; PREKIDNI VEKTOR na adresi 8


ORG

DW

200

; adresa p.p.

; GLAVNI PROGRAM
GLAVNI

MOVE

1000, R0

; adresa podataka

STORE

R0, (PODATAK)

MOVE

100, R0

STORE

R0, (BROJAC)

; broja podataka

; DOZVOLI PREKID NA INT0


MOVE

PETLJA

JP

%B 10000, SR

PETLJA

; "koristan posao"
729

; PREKIDNI POTPROGRAM NA ADRESI 200

SUB

ORG

200

PUSH

R0

PUSH

R1

PUSH

R2

MOVE

SR,R0

PUSH

R0

STORE

R0, (IACK)

; prihvaen prekid

LOAD

R0, (BROJAC)

; dohvat varijabli

LOAD

R1, (PODATAK)

LOADH

R2, (R1)

; itanje iz memorije

STORE

R2, (SEND)

; i slanje na VJ

ADD

R1, 2, R1

; pomicanje pokazivaa

STORE

R1, (PODATAK)

R0, 1, R0

; spremanje konteksta

; smanjenje brojaa

STORE

R0, (BROJAC)

JR_NZ

IMA_JOS
730

ZADNJI

IMA_JOS

MOVE

0, R0

; ako je zadnji podatak

STORE

R0, (STOP)

; zaustavi VJ

POP

R0

MOVE

R0, SR

POP

R2

POP

R1

POP

R0

; obnavljanje konteksta

STORE R0, (IEND)

; kraj posluivanja

RETI
BROJAC

DW

PODATAK DW

; varijable za p.p.

; Podaci iz memorije koji se alju na VJ


ORG
DH

1000
12, 4, 456A, 1, 0AB, 2, 885, ...

731

Prekidni prijenos - Primjeri


Komentari:
U kontekst prekidnog potprograma ulazi i SR*
(osim u rijetkim sluajevima kad se SR ne mijenja u
prekidnom potprogramu)
Za obine potprograme SR ne ulazi u kontekst, jer
pozivatelj moe pretpostaviti da e potprogram
promijeniti SR i zato pozivatelj nikada nema u SR-u neko
stanje koje e mu trebati nakon povratka iz potprograma
(Ako pozivatelju obinog potprograma treba stanje iz SRa, onda ga pozivatelj treba spremiti).
* Neki procesori automatski spremaju statusni registar prilikom
prihvaanja prekida
31
732

Posluivanje vie prekidnih VJ


Do sada smo vidjeli samo najjednostavniji sluaj kad je
na procesor spojena jedna prekidna VJ
Kad postoji vie prekidnih VJ, one se mogu posluivati sa
ili bez gnijeenja (engl. nesting):
bez gnijeenja prekidnih potprograma:
dok se posluuje jedna VJ, drugi prekidi se ne
prihvaaju
jednostavniji sluaj
sa gnijeenjem prekidnih potprograma:
dok se posluuje jedna VJ, moe se prihvatiti
drugi prekid (veeg prioriteta)
kompliciraniji sluaj
32
733

Posluivanje vie prekidnih VJ


Svim vanjskim jedinicama treba dodijeliti razliite
prioritete, to se moe napraviti:
programski (FRISC za maskirajue)
sklopovski
sam procesor ima vie prekidnih prikljuaka s razliitim
prioritetima (FRISC: NMI je prioritetniji od INT)
prioritetni lanac vanjskih jedinica (daisy-chain)
jedinica za kontrolu prioriteta (programmable interrupt
controller ili priority interrupt controller)

Prioriteti imaju dvojaku ulogu:


kod istovremenih prekida odreuje se kojoj VJ se prihvaa
prekid (slui i za gnijeenje prekida i kad nema gnijeenja)
za vrijeme obrade jednog prekida odreuje hoe li se prihvatiti
novi prekid (slui samo za gnijeenje prekida)
33
734

Posluivanje vie prekidnih VJ


Bez obzira kako se posluuju, uvijek treba odrediti
uzronike prekida o emu ovisi koju VJ emo posluiti
Ovisno o prekidnom sustavu procesora, mogua su
razliita rjeenja:
VJ sklopovski utjee na odabir adrese prekidnog
potprograma ime se automatski odreuje uzronik
prekida
Adresa prekidnog potprograma bira se na temelju ulaznog
prekidnog prikljuka iji prekid je prihvaen
(FRISC: NMI ima razliitu adresu p.p. od INT)
Programski se odreuje koja jedinica je izazvala prekid
(FRISC: ispitivanjem BS)

34
735

Posluivanje vie prekidnih VJ


Ispitivanje uzronika prekida kod prekida:
ispituje se spremnost VJ (bistabil stanja)
ovo ne treba mijeati s ispitivanjem uvjetnih VJ, jer
se ovdje samo jednom ispita spremnost, tj. nema ekanja
da VJ postane spremna niti se obavlja prozivanje
redoslijed ispitivanja definira prioritete VJ:
jedinice koje se prije ispituju imaju vei prioritet

35
736

Prekidni prijenos - Primjer


Na FRISC su spojene vj0, vj1, vj2 i vj3 na adresama FFFF0000,
FFFF1000, FFFF2000 i FFFF3000. Vj0 je ulazna bezuvjetna, vj1 i
vj2 izlazne prekidne jedinice spojene na INT (ne mogu se
meusobno prekidati), a vj3 je izlazna prekidna jedinica spojena
na NMI. Procesor alje podatke s vj0 na vj1 i vj2 i broji koliko je
podataka poslao. Kad vj3 zatrai prekid, treba joj poslati broj do
tada prenesenih podataka.
VJ0 bezuvjetna

VJ1 prekidna
INT
FRISC

VJ2 prekidna
INT

VJ3 prekidna
NMI

36
737

PRIMI0

EQU

0FFFF0000

SALJI1

EQU

0FFFF1000

BS1

EQU

0FFFF1004

POSLUZEN1 EQU

0FFFF1008

SALJI2

EQU

0FFFF2000

BS2

EQU

0FFFF2004

POSLUZEN2 EQU

0FFFF2008

SALJI3

EQU

0FFFF3000

BS3

EQU

0FFFF3004

POSLUZEN3 EQU

0FFFF3008

ORG

MOVE

10000, SP

JP

GLAVNI

; prekidni vektor za maskirajui prek.


ORG

DW

100
738

; prekidni potprogram za
; nemaskirajui prekid na adresi 0C
ORG

0C

PUSH

R0

STORE R0, (BS3) ; prihvaen prekid


LOAD

R0, (BROJAC) ; broj poslanih

STORE

R0, (SALJI3) ; poalji na vj3

POP

R0

STORE

R0, (POSLUZEN3) ; dojava kraja

RETN
; Glavni program

GLAVNI

; dozvoli prekid na INT0


MOVE

%B 10000, SR

; "koristan posao"
PETLJA

JR

PETLJA

; broja poslanih podataka


BROJAC

DW

0
739

ISPITAJ

ORG

100

PUSH

R0

; spremanje

MOVE

SR, R0

; konteksta

PUSH

R0

LOAD

R0, (BS1)

; otkrivanje

AND

R0, 1, R0

; uzronika

JR_NZ P_VJ1

VAN

; prekida

JR

P_VJ2

POP

R0

MOVE

R0, SR

; obnova

POP

R0

; konteksta

RETI

740

P_VJ1 ; dio za posluivanje vj1


STORE R0, (BS1) ; prihvaen prekid

LOAD

R0, (PRIMI0) ; itaj bezuvjetnu vj0

STORE R0, (SALJI1) ; alji na vj1

LOAD

R0, (BROJAC) ; poveaj

ADD

R0, 1, R0

; broja poslanih

STORE R0, (BROJAC) ; podataka

STORE R0, (POSLUZEN1)


JR

VAN

; kraj posluivanja

; povratak

P_VJ2 ; dio za posluivanje vj2


; analogno kao i P_VJ1
...

741

Prekidni prijenos - Primjer


Komentar:
Vj1 i vj2 se ne mogu meusobno prekidati, ali u prekidnom
potprogramu se prvo ispituje vj1 pa e ona biti prioritetnija od
vj2 u smislu da e kod istovremenog prekida prva biti
posluena vj1.
Kod istovremenog prekida deava se sljedee:
Prihvaa se prekid ime se automatski zabrani prihvaanje
daljnjih prekida. U p.p.-u se ustanovi da je vj1 izazvala prekid
te se obrauje njen prekid. Cijelo to vrijeme vj2 zahtjeva
prekid, ali je prihvaanje prekida u procesoru zabranjeno i
prekid od vj2 se ne prihvaa: kaemo da je prekid "na
ekanju" (tzv. pending interrupt).
Nakon povratka iz prekidnog potprograma od vj1, doi e do
omoguavanja prekida (naredba RETI). Tada e prekid od vj2
konano biti prihvaen te e se skoiti u prekidni potprogram
koji e tada posluiti vj2.

41
742

FRISC VJ

743

Sklop FRISC-CT

Kova, Basch, FER, Zagreb

7442

Sklop FRISC-CT
Sklop FRISC-CT, ili krae CT (kratica od Counter Timer)
slui za brojenje impulsa i mjerenje vremena
Za razliku od dosadanjih VJ, CT ne prenosi podatke
Slini sklopovi postoje i za komercijalne procesore

CT oslobaa procesor od nepotrebnih ekanja ili estih


posluivanja prekida

3
745

Sklop FRISC-CT
Za razliku od do sada pokazanih vanjskih jedinica koje su
bile openite i imale su nepromjenjivu zadau, CT je
sklop koji se moe "programirati" (tonije:
konfigurirati)
Na taj nain se ponaanje i funkcija vanjske jedinice
prilagoavaju konkretnoj zadai koju treba napraviti
Programiranje sklopa se ostvaruje slanjem posebnih
upravljakih rijei na odreene adrese na kojima se
sklop nalazi

4
746

Blok-shema CT-a
Suelje za spajanje s FRISC-om, isto je kao za prekidne
jedinice
DC broji prema nuli i ima 16 bita
FRISC CT

CNT
ZC

adr

proces

data
DC

Upravljaki dio
rd
wr
int

LR
CR

Bistabil
stanja

747

Adrese CT-a
CT zauzima etiri uzastopne 32-bitne lokacije:

Adresa
PA
PA + 4
PA + 8
PA+ 1210

Pisanje
Upis CR
upis u LR (i DC)
dojava prihvaanja prekida (tj. brisanje BS)
dojava o kraju posluivanja prekida

itanje
itanje CR
Trenutna vrijednost DC
itanje BS
-

6
748

Upravljaka rije - CR

bitovi 31 3

bit 2

bit 1

bit 0

VRSTA INT

INT

STOP / START

0 maskirajui
1 nemaskirajui

0 ne postavlja prekid
1 postavlja prekid

brojilo
zaustavljeno
1 brojilo broji

je

7
749

Ostale adrese
CT registar punjenja brojaa LR (engl. Load Register)
Na adresi PA+4 pristupa se 16-bitnom LR registru. Pri pisanju u ovaj
registar zapisati e se niih 16 bitova podatka dok e vii dio
podatka biti zanemaren. Pri itanju s ove adrese proitati e se
trenutna vrijednost brojila (DC).
CT bistabil stanja BS
Na adresi PA+8 pristupa se CT jednobitnom bistabilu stanja BS.
Kada procesor inicira naredbu pisanja na ovu adresu, podatak koji
procesor alje se zanemaruje a CT brie BS (BS=0). Pri prekidnom
prijenosu, ovime procesor potvruje prihvaanje zahtjeva za prekid.
itanjem ove adrese, na najniem bitu podatka ita se trenutna
vrijednost BS.
CT dojava kraja posluivanja prekida
Preko etvrte adrese koju zauzima CT ( PA+1210) procesor pisanjem
bilo kojeg podatka (podatak koji procesor alje se zanemaruje)
procesor javlja CT sklopu da je posluivanje obrade njegovog
prekida zavreno. itanje s ove adrese nije definirano.

8
750

Kad DC=0
U trenutku kad brojilo doe do nule CT izvodi sljedee:
CT postavlja BS=1 i generira prekid (ako je
konfiguracijom omogueno)
Na izlazu ZC (engl. Zero Count) CT generira jedan
pozitivan impuls
CT automatski kopira vrijednost iz LR u DC, ime brojilo
moe ponovo poeti brojati nove impulse

9
751

CT Primjeri
Na CT-ov prikljuak CNT spojen je izlaz iz stroja koji za
svaki proizvedeni vijak generira impuls. Raunalo mora u
lokaciji BR_PAK prebrajati proizvedene pakete od po 200
vijaka. Treba rijeiti zadatak CT-om (na adresi FFFF0000)
tako da:
a) CT radi u uvjetnom nainu,
b) CT radi u prekidnom nainu i spojen je na INT.

10
752

Uvjetni nain rada:


CTCR

EQU

0FFFF0000

CTLR

EQU

0FFFF0004

CTSTAT

EQU

0FFFF0008

CTEND

EQU

0FFFF000C

ORG

; GLAVNI PROGRAM

; INICIJALIZACIJA CT-a
GLAVNI

MOVE

%D 200, R0

STORE

R0, (CTLR)

MOVE

1, R0

STORE

R0, (CTCR)

; brojilo broji

; ISPITIVANJE CT-a
PETLJA

LOAD

R0, (CTSTAT)

;ekanje spremnosti

AND

R0, 1, R0

;tj. ekanje da se

JR_Z

PETLJA

;proizvede paket

753

BR_PAK

STORE

R0, (CTSTAT)

LOAD

R0, (BR_PAK)

ADD

R0, 1, R0

STORE

R0, (BR_PAK)

STORE

R0, (CTEND)

JR

PETLJA

DW

;brisanje spremnosti

;poveaj broja

;kraj posluivanja

754

Prekidni nain rada:


CTCR

EQU

0FFFF0000

CTCR

EQU

0FFFF0004

CTIACK

EQU

0FFFF0008

CTIEND

EQU

0FFFF000C

ORG

MOVE

10000, R7

JP

GLAVNI

; PREKIDNI VEKTOR

GLAVNI

ORG

DW

1000

; GLAVNI PROGRAM
; INICIJALIZACIJA CT-a
MOVE

%D 200, R0

STORE

R0, (CTLR)

; postavljanje brojaa

; KONTR. RIJE
MOVE

%B 11, R0

STORE

R0, (CTCR)

MOVE

%B 10000, SR

; INT + brojilo broji

; OMOGUI PREKID
755

; "KORISTAN POSAO"
PETLJA

JR

PETLJA

ORG

1000

; PREKIDNI POTPROGRAM

PUSH

R0

MOVE

SR, R0

PUSH

R0

STORE

R0, (CTIACK)

obrii spremnost

LOAD

R0, (BR_PAK)

poveaj

ADD

R0, 1, R0

broja

STORE

R0, (BR_PAK)

paketa

POP

R0

MOVE

R0, SR

POP

R0

STORE

R0, (CTIEND)

spremanje konteksta

Napomena:
Iako je rjeenje s prekidom,
dulje, izvodi se puno efikasnije,
jer uvjetno posluivanje troi
gotovo svo vrijeme samo na
ispitivanje spremnosti CT-a.

obnova konteksta

dojava kraja

RETI
BR_PAK

DW

; BROJA PAKETA

756

CT Primjeri
FRISC treba svake sekunde izvesti potprogram POTP.
Vremensko kanjenje treba ostvariti pomou sklopova CT,
a ne programskom petljom za kanjenje. Pretpostavka je
da program POTP ve postoji i da njegovo izvoenje
sigurno traje krae od jedne sekunde. Signal koji se dovodi
na CT ima frekvenciju 10 MHz.

15
757

Prijedlog rjeenja

Signal
CNT 10MHz

proces
CT1
LR=1000

ZC

FRISC

CNT
int
CT2
LR=10000

int

16
758

CTCR1

EQU

0FFFF1000

CTLR1

EQU

0FFFF1004

CTCR2

EQU

0FFFF2000

CTLR2

EQU

0FFFF2004

CTIACK2

EQU

0FFFF2008

CTIEND2

EQU

0FFFF200C

ORG

MOVE

10000, R7

JP

GLAVNI

ORG
DW

8
1000

; prekidni vektor

759

GLAVNI

; inicijaliziraj CT1
MOVE

%D 1000, R0

STORE

R0, (CTLR1)

MOVE

1, R0

STORE

R0, (CTCR1)

; LR1=1000

; CR1: bez INT

; inicijaliziraj CT2
MOVE

%D 10000, R0

STORE

R0, (CTLR2)

MOVE

%B 11, R0

STORE

R0, (CTCR2)

MOVE

%B 10000, SR

; LR2=10000

; CR2: postavlja INT

; omogui prekid INT0

; prekidni potprogram - izvodi se svake sek.


; kontekst se ne sprema jer se ne mijenjaju registri
ORG

1000

STORE

R0, (CTIACK2) ; potvrda prekida

CALL

POTP

STORE

R0, (CTIEND2) ; potvrda kraja

; poziv zadanog potprograma

RETI
760

Sklop FRISC-PIO

Kova, Basch, FER, Zagreb

19
761

Sklop FRISC-GPIO
Sklop FRISC-GPIO, ili krae GPIO (kratica od General Purpose
Input-Output) je sklop koji slui za paralelni prijenos
podataka (8 bitnih)
Posrednik izmeu procesora i procesa (djelomino slian
opim VJ kojima smo do sada prenosili podatke)
Slini sklopovi postoje i za komercijalne procesore
GPIO moe raditi u 4 naina rada od kojih dva omoguavaju
sinkroni prijenos podataka a dva asinkroni:

ulazni (ulazni, sinkroni)


ispitivanje bitova (ulazni, asinkroni)
izlazni (izlazni, sinkroni)
postavljanje bitova (izlazni, asinkroni)

20
762

Blok-shema GPIO
Suelje za spajanje s FRISC-om, isto je kao za prekidne
jedinice
FRISC GPIO
Sinkronizacija
(READY,STROBE)

adr

proces

data
Upravljaki dio

Registar (8 bita)

rd

wr

int

CR

Bistabil
stanja

21
763

GPIO

Adresa

Pisanje

itanje

PA

upravljaka rije CR

upravljaka rije CR

PA + 4

upis podatka u DR

itanje DR

PA + 8

dojava prihvaanja prekida (tj. brisanje BS)

itanje BS

PA + 1210

dojava o kraju posluivanja prekida

22
764

CR

31 24

23 16

15 8

75

10

ACTIVE

MASK

AND/OR

VRSTA INT

INT

MODE

0 aktivna je 0
1 aktivna je 1

0 OR
1 AND

0 maskirajui
1 nemaskirajui

0 ne postavlja prekid
1 postavlja prekid

00
01
10
11

izlazni nain
ulazni nain
postavljanje bitova
ispitivanje bitova

23
765

Naini rada
Izlazni
prijenos je sinkroniziran upravljakim signalima READY i
STROBE
Istovjetno ve ranije opisanoj izlaznoj prekidnoj VJ

Ulazni
prijenos je sinkroniziran upravljakim signalima READY i
STROBE
Istovjetno ve ranije opisanoj ulaznoj prekidnoj VJ

24
766

Naini rada
Postavljanje bitova
ne koriste se sinkronizacijski signali, bistabil stanja ni prekid
GPIO u ovom nainu radi kao bezuvjetna izlazna VJ

Ispitivanje bitova
ne koriste se sinkronizacijski signali
GPIO u ovom nainu radi kao bezuvjetna ulazna VJ
Dodatna funkcija: automatska provjera stanja na ulazima i
postavljanje BS i generiranje prekida

25
767

Ispitivanje bitova
Ulazni 8-bitni podatak iz vanjskog
procesa
Konfiguracijski bitovi u CR:

Izaberi samo bitove koji se


provjeravaju

MASK bitovi iz CR

Provjeri koji su izabrani bitovi na


aktivnim razinama

ACTIVE bitovi iz CR

AND/OR bit iz CR

Da li su SVI/BAR JEDAN izabrani bit


u aktivnoj razini ?

DA

Nastavi pratiti podatke

BS=1
(generira se prekid
ako je omoguen)

31 24

23 16

15 8

75

ACTIVE
0 aktivna je 0
1 aktivna je 1

MASK

4
AND/OR
0 OR
1 AND

3
VRSTA INT
0 maskirajui
1 nemaskirajui

2
INT
0 ne postavlja prekid
1 postavlja prekid

10

00
01
10
11

MODE
izlazni nain
ulazni nain
postavljanje bitova
ispitivanje bitova

26
768

Ispitivanje bitova

BS

int

Vanjski proces
postavlja
podatak koji
zadovoljava
uvjete:
GPIO generira
prekid

Procesor
prihvaa
prekid (ili
brie BS)

Procesor
javlja kraj
posluivanja

27
769

GPIO Primjeri
Na pisa koji je spojen na GPIO treba poslati 8016 znakova
veliine jedan oktet, smjetenih u memoriji od lokacije
ZNAKOVI. GPIO radi u prekidnom nainu, a adresa mu je
FFFF0000. Pretpostavka je da nema drugih izvora prekida,
a GPIO je spojen na int[0]. Pretpostavka je da pisa ima
linije za rukovanje kompatibilne sa READY i STROBE.

28
770

PIO e raditi u izlaznom nainu., jer e s pisaem biti potrebna sinkronizacija.


PIOC

EQU

0FFFF0000

PIOD

EQU

0FFFF0004

PIOIACK EQU

0FFFF0008

PIOIEND EQU

0FFFF000C

ORG

MOVE

10000, R7

JP

GLAVNI

ORG

DW

; prekidni vektor
500

; glavni program

; inicijalizacija sklopa PIO


GLAVNI

MOVE

%B 0100, R0 ; 0(maskirajui)1(prekid)00(izlazni)

STORE R0, (PIOC)

; poalji u OCR

MOVE

%B 010000, SR

; dozvoli INT0

PETLJA

JR

PETLJA

BROJAC

DW

; broja poslanih znakova

ZNAKOVI

DB

...

; 80 znakova za slanje

; "koristan posao"

771

ORG

500

; prekidni potprogram

PUSH

R0

PUSH

R1

PUSH

R2

MOVE

SR, R0

PUSH

R0

STORE

R0, (PIOIACK) ; potvrda prekida

LOAD

R1, (BROJAC)

; dohvat brojaa

MOVE

ZNAKOVI, R0

; dohvat poetne adrese

ADD

R0, R1, R0

; raunanje adrese znaka

LOADB

R2, (R0)

; dohvat znaka iz mem.

STORE

R2, (PIOD)

; slanje znaka na PIO

ADD

R1, 1, R1

STORE

R1, (BROJAC)

CMP

R1, %D 80

; je li poslan

JR_NE

JOS

; zadnji znak ?

; poveanje brojaa

772

KRAJ ; zabrani PIO-u da dalje zahtijeva prekide


MOVE

00, R0

STORE R0, (PIOC)

JOS

; ima jo znakova za slanje


POP

R0

MOVE

R0, SR

POP

R2

POP

R1

POP

R0

STORE

R0, (PIOIEND) ; dojava kraja posluiv.

RETI

773

GPIO Primjeri
Na prvi GPIO na ulazne bitove PIOD3-PIOD7 spojeno je 5
senzora (aktivna razina im je niska). Svaki puta kad se svih
5 senzora aktiviraju, FRISC treba bezuvjetno poslati
procesu podatak iz bloka memorije s poetnom adresom
BLOK. Proces je spojen na drugi GPIO. Prvi GPIO radi u
prekidnom nainu.
Nakon slanja 10 podataka, treba zabraniti daljnje
generiranje prekida od strane GPIO1 i nastaviti izvoenje
glavnog programa.

32
774

Odaberimo adrese za GPIO1 i GPIO2: FFFF1000 i FFFF2000. GPIO1 emo spojiti na INT i
programirati da radi u nainu ispitivanja bitova, a GPIO2 u nainu postavljanja bitova.
PIOC1

EQU

0FFFF1000

PIOD1

EQU

0FFFF1004

PIOIACK1 EQU

0FFFF1008

PIOIEND1 EQU

0FFFF100C

PIOC2

EQU

0FFFF2000

PIOD2

EQU

0FFFF2004

ORG

MOVE

10000, R7

JP

GLAVNI

ORG
DW
GLAVNI

MOVE

; prekidni vektor
500

BLOK, R0

; adresu podataka

STORE R0, (PODAT)

; stavi u PODAT

MOVE

; broj podataka

%D 10, R0

STORE R0, (BROJAC)

; stavi u BROJAC
775

; inicijalizacija sklopa PIO1


MOVE

%B 111100000010111, R0

STORE R0, (PIOC1)


MOVE

PETLJA

%B 010, R0

STORE R0, (PIOC2)

; poalji u CR

MOVE

; dozvoli INT

JR

%B 10000, SR
PETLJA

PODAT

DW

BROJAC

DW

BLOK

; poalji u CR

DW

; "koristan posao"

3, 1, 5, 7, 3, 9, 2, 6, 5, 4

; prekidni potprogram
ORG 500

PUSH

R0

PUSH

R1

MOVE

SR, R0

PUSH

R0

; spremi kontekst

776

STORE R0, (PIOIACK1); dojavi prihvat na PIO1

LOAD

R0, (PODAT)

; dohvati adresu podatka

LOAD

R1, (R0)

; dohvati podatak

STORE R1, (PIOD2)

; alji podatak na PIO2

ADD

; pomakni adresu na

R0, 4, R0

STORE R0, (PODAT)


LOAD

R0, (BROJAC)
SUB

; sljedei podatak
; dohvati

R0, 1, R0

; i smanji

STORE R0, (BROJAC)


JR_NZ JOS

KRAJ

; ima li jo podataka

; zabrani prekide na PIO1


MOVE

%B 011, R0

STORE R0, (PIOC1)


JOS

; broja

POP

R0

MOVE

R0, SR

POP

R1

POP

R0

; poalji u CR

STORE R0, (PIOIEND1)

; obnovi kontekst

; dojava kraja poslu.

RETI
777

DMA

778

Sklopovski UI prijenos - DMA

Kova, Basch, FER, Zagreb

7792

DMA prijenos
Izravni pristup memoriji ili DMA (Direct Memory Access)
je sklopovski ulazno-izlazni prijenos
Prijenos ne obavlja procesor, nego posebna DMAjedinica (ili DMA-sklop, engl. DMA controller)
Velika brzina prijenosa (podatci ne prolaze kroz
procesor)
Mogu je prijenos izmeu memorije i UI jedinice ili neka
druga kombinacija izvora i odredita podataka

3
780

DMA prijenos
Osnovna ideja:
Procesor inicijalizira DMA-sklop, kako bi ovaj znao koliko
podataka treba prenijeti, gdje su izvor i odredite podataka itd.
DMA-sklop preuzme upravljanje nad sabirnicom i obavlja
prijenos
Procesor je za vrijeme prijenosa neaktivan
Procesor i DMA-sklop moraju se meusobno sinkronizirati kako
bi u svakom trenutku samo jedan od njih upravljao sabirnicom:
za to se koriste linijama BREQ i BACK
Pod upravljanjem sabirnicom misli se na iniciranje sabirnikih
transakcija itanja i pisanja (npr. upravljanje adresnom
sabirnicom, rd, wr, itd.)

4
781

DMA - Shema

Procesor

breq=0

breq=1

back=0

back=1

DMA
sklop

DMA
sklop

sabirnica

sabirnica

Memorija

Procesor

UI
jedinica

Procesor upravlja
sabirnicom*

Memorija

UI
jedinica

DMA-sklop upravlja
sabirnicom

*Slika simbolino prikazuje stanje na sabirnici. DMA sklop ne upravlja sabirnicom, ali mu
procesor moe normalno pristupati kao i drugim UI jedinicama i memoriji
782

DMA - Vrste prijenosa


Vrste DMA prijenosa:
Zaustavljanje procesora (engl. continuous, halting)
Kraa ciklusa (engl. cycle stealing, word-at-a-time)
Blokovski (engl. burst)

6
783

DMA - Zaustavljanje procesora


breq je prioritetniji od svih zahtjeva za prekid

BREQ
BACK
Upravljanje
prijenosom

CPU

CPU

DMA

DMA

DMA

DMA

DMA

DMA

CPU

7
784

DMA - Kraa ciklusa


DMA kraom ciklusa odvija se ovako:
DMA-sklop preuzme upravljanje nad sabirnicom
DMA-sklop prenese jedan podatak
Upravljanje nad sabirnicom se vraa procesoru
Gornja tri koraka se ponavljaju dok se ne prenesu svi
podatci
Prednost: procesor se usporava, ali ipak izvodi glavni program
Nedostatak: sporije od zaustavljanja procesora (dio vremena
troi se na sinkronizaciju oko upravljanja sabirnicom)

8
785

DMA - Kraa ciklusa

BREQ
BACK
Upravljanje
prijenosom

CPU

CPU

DMA

CPU

DMA

CPU

DMA

9
786

DMA - Blokovski prijenos


DMA blokovskim prijenosom odvija se ovako:
DMA-sklop preuzme upravljanje nad sabirnicom
DMA-sklop prenese nekoliko podataka (tj. blok)
Upravljanje nad sabirnicom se vraa procesoru
Gornja tri koraka se ponavljaju dok se ne prenesu svi
podatci
Kompromis izmeu zaustavljanja procesora i krae ciklusa
Zaustavljanje procesora moe se promatrati kao blokovski
prijenos kod kojeg je veliina bloka jednaka svim podatcima
Kraa ciklusa moe se promatrati kao blokovski prijenos kod
kojeg je u bloku samo jedan podatak
10
787

DMA-sklopovi
DMA-sklopovi mogu imati razliite mogunosti:
prijenos podataka izmeu razliitih izvora i odredita
memorija VJ
memorija memorija (kopiranje bloka, inicijalizacija bloka)
VJ memorija
VJ VJ
traenje podataka u bloku ili kombinirani prijenos s traenjem
odabir naina prijenosa
dojava kraja prijenosa
postavljanje spremnosti
prekid
generiranje impulsa (mogu se prebrajati npr. CT-om)
itd.
11
788

Sklop FRISC-DMA

Kova, Basch, FER, Zagreb

12
789

Sklop FRISC-DMA
Sklop FRISC-DMA ima sljedee mogunosti:
Prijenos 32-bitnih podataka
Odabir vrste prijenosa:
zaustavljanje procesora
kraa ciklusa
Zbog memorijskog preslikavanja, tj. jednakog pristupa
memoriji i UI jedinicama, izvor i odredite mogu biti bilo
koja kombinacija ovih komponenata
Pristup UI jedinicama obavlja se bez provjere (bezuvjetno)
to znai da UI jedinica mora biti sposobna primati/slati
podatke brzinom DMA-prijenosa
Dojava kraja prijenosa obavlja se postavljanjem
spremnosti i prekidom
13
790

FRISC-DMA
FRISC DMA
+4
ADR izvora

clock

adr

+4
ADR odredita

data

rd

wr

Upravljaki dio

-1

Broja

adr

adr

=0

CR

BS

meuspremnik

int

breq

back

14
791

Programski pogled

adresa
PA
PA + 4
PA + 8
PA + 1210
PA + 1610
PA + 2010

Pisanje
upis adrese izvora
upis adrese odredita
upis u broja podataka
upis upravljake rijei CR
pokretanje prijenosa
potvrda prihvata prekida (tj. brisanje bistabila
stanja)

itanje
itanje adrese izvora
itanje adrese odredita
itanje brojaa podataka
itanje CR
itanje bistabila stanja
BS

15
792

CR

bitovi 31 4

bit 3

bit 2

bit 1

bit 0

DESTINATION

SOURCE

MODE

INT

0 memorija
1 vanjska jedinica

0 memorija
1 vanjska jedinica

zaustavljanje 0 ne postavlja
procesora
prekid
1 kraa ciklusa
1 postavlja prekid

16
793

Inicijalizacija sklopa FRISC-DMA


Prilikom inicijalizacije treba zadati (u bilo kojem
redoslijedu):

broj podataka
adresu izvora
adresu odredita
upravljaku rije

Nakon toga treba pokrenuti DMA-prijenos upisom na


adresu PA+16 (odmah nakon toga poinje DMAprijenos)
ako je odabrano zaustavljanje procesora, dio programa iza
naredbe za pokretanje DMA-prijenosa nee se izvoditi sve
dok se prijenos ne zavri
ako je odabrana kraa ciklusa, dio programa iza naredbe
za pokretanje se izvodi, ali usporeno
17
794

DMA Primjeri
Treba prenijeti 100010 podataka iz VJ na adresi FFFF3330 u
memoriju od adrese 4000. Adresa DMA-sklopa je
FFFF0000. Prije ili za vrijeme prijenosa moe se izvoditi
potprogram POTPR. Kad je prijenos gotov, treba pozvati
potprogram GOTOVO te nastaviti s radom glavnog
programa (pretpostavka je da su ovi potprogrami ve
napisani i da postoje u memoriji). Prijenos treba obaviti
zaustavljanjem procesora.

18
795

DMA_SRC

EQU 0FFFF0000

DMA_DEST

EQU 0FFFF0004

DMA_SIZE

EQU 0FFFF0008

DMA_CTRL

EQU 0FFFF000C

DMA_START EQU 0FFFF0010


DMA_BS

INIT

EQU 0FFFF0014

MOVE

10000, SP

; inicijalizacija DMA-sklopa
MOVE

0FFFF3330, R0

; upis adrese

STORE R0, (DMA_SRC)

; izvora

MOVE

; upis adrese

4000, R0

STORE R0, (DMA_DEST)

; odredita

MOVE

; upis broja

%D 1000, R0

STORE R0, (DMA_SIZE)

; podataka

; Upis upravljake rijei:


MOVE

%B 0100, R0

STORE R0, (DMA_CTRL)


796

; pokretanje DMA-prijenosa
GLAVNI

STORE R0, (DMA_START)

; dio programa koji e se izvesti tek nakon


; zavrenog DMA-prijenosa
STORE R0, (DMA_ACK) ; brisanje BS DMA

CALL POTPR
CALL
...

GOTOVO
; nastavak glavnog programa

797

DMA Primjeri
Prethodni zadatak treba rijeiti kraom ciklusa.

21
798

DMA_SRC

EQU 0FFFF0000

DMA_DEST

EQU 0FFFF0004

DMA_SIZE

EQU 0FFFF0008

DMA_CTRL

EQU 0FFFF000C

DMA_START EQU 0FFFF0010


DMA_BS

INIT

EQU 0FFFF0014

MOVE

10000, SP

; inicijalizacija DMA-sklopa
MOVE

0FFFF3330, R0

; upis adrese

STORE R0, (DMA_SRC)

; izvora

MOVE

; upis adrese

4000, R0

STORE R0, (DMA_DEST)

; odredita

MOVE

; upis broja

%D 1000, R0

STORE R0, (DMA_SIZE)

; podataka

; Upis upravljake rijei:


MOVE

%B 0110, R0

STORE R0, (DMA_CTRL)


799

; pokretanje DMA-prijenosa
GLAVNI

STORE R0, (DMA_START)


; dio programa koji se izvodi usporeno i istodobno
; s DMA-prijenosom

CALL

POTPR

; dio programa koji se mora izvesti NAKON DMA-prijenosa

CEKAJ

LOAD

R0, (DMA_BS) ; uitaj spremnost DMA-sklopa

AND

R0, 1, R0

JR_Z

CEKAJ

; ekaj zavretak prijenosa

STORE R0, (DMA_ACK)


CALL
...

; brisanje BS DMA

GOTOVO
; nastavak glavnog programa

800

DMA - Brzina prijenosa

Priblina usporedba bezuvjetnog prijenosa i DMA za N podataka (npr. iz VJ u


memoriju):

PETLJA

Naredba
LOAD R0, (VJ_READ)
STORE R0, (R2)
ADD R2, 4, R2
SUB R3, 1, R3
JR_NZ PETLJA

trajanje
2
2
1
1
2

Vidimo da za N podataka programu treba priblino N*8 perioda (stvarno mu


treba jedan period manje jer kod zadnjeg prolaska kroz petlju JR traje samo
jedan period, ali je to zanemarivo u odnosu na N*8).
U sluaju prijenosa podataka koritenjem FRISC-DMA, sustavu e trebati N*2
perioda (DMA ita podatak preko sabirnice (prvi period) i onda ga zapisuje
(drugi period)).
Kod mnogih stvarnih VJ est je sluaj da je DMA dio VJ pa DMA ne treba
komunicirati sa VJ preko procesorske sabirnice te je za jedan podatak potreban
samo jedan ciklus !!!

24
801

Anda mungkin juga menyukai