Upravljaka
jedinica
Put
podataka
Upravljaka jedinica
Dio procesora koji upravlja radom puta podataka, memorije i
ulazno/izlaznih sklopova na temelju naredaba programa koji se
izvodi
10
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
12
13
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
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.
16
Razine apstrakcije
Mikroarhitektura
Detaljan sklopovski opis arhitekture procesora. Opisuje naine
povezivanja pojedinih dijelova procesora te signale potrebne za
njihovo upravljanje.
17
Razine apstrakcije
Razine apstrakcije koje emo koristiti na ovom predmetu
su:
Arhitektura skupa naredaba (Instruction set architecture ISA)
Mikroarhitektura
11
18
12
19
>>>>
13
20
21
Harvardska arhitektura
Procesor
Memorija za
programe
Memorija
za podatke
15
22
16
23
sabirnice
24
Memorijski podsustav
Adresna sabirnica
Mem
Podatkovna sabirnica
chip
Upravljaka sabirnica
Adresni dekoder
18
25
26
STAVI
UZMI
20
27
Stog
S tanjurima je lako: uvijek znamo gdje stavljamo tanjur ili od
kuda uzimamo tanjur
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
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
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
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
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
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 registar-memorija
Arhitekture registar-registar (tzv. load-store)
34
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
35
Stogovna arhitektura
Primjer: raunanje funkcije x=a+b
Procesor
stog
...
B
A
X
...
TOS
TOS
TOS
push A
push B
add
pop X
;
;
;
;
;
ALU
...
B
A
X
...
Memorija
36
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
Akumulatorska arhitektura
Jedan operand je uvijek u posebnom
registru koji se naziva Akumulator (Acc)
Acc
ALU
B
A
X
...
38
Akumulatorska arhitektura
Primjer: raunanje izraza
x=a+b
Acc
ALU
B
A
X
add B
...
39
Akumulatorska arhitektura
Vrlo esta arhitektura prvih procesora, a danas se jo moe
nai kod nekih jednostavnih mikrokontrolera
40
Arhitektura registar-memorija
R4
R3
R2
R1
ALU
B
A
X
...
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
10
ALU
B
A
X
...
43
11
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
12
45
13
46
14
Akumulatorska
EDSAC
Registarsko-memorijska
Motorola 68000 i Intel 80x86 (imaju karakeristike reg-mem i
reg-reg)
Registarsko-registarska (load-store)
ARM, MIPS, SPARC
47
15
ALU
48
16
>>>>
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
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
19
RISC
70tih i poetkom 80tih dominaciju na tritu imali su 8-bitni CISC
procesori
52
20
RISC
Primjeri jednostavnih "RISC-naredaba"
53
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
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
23
56
24
57
25
Byte
Short
Int
Long
Float
Double
8b
16b
32b
64b
32b
64b
26
59
27
60
28
Adresni prostor
Logiki adresni prostor
00000000
Memorija
...
FFFFFFFF
61
29
little- endian
big-endian
1000
34
1000
12
1001
12
1001
34
62
30
Programsko brojilo
Spomenuli smo da procesor dohvaa naredbe iz memorije i
izvodi ih
SUB
LOAD
STORE
...
izvedena prethodno
Naredba koja se
trenutano izvodi
Naredba koju treba
sljedeu izvesti
63
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
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
33
34
67
35
Polje operacijskog
koda
Polje prvog
operanda
Polje drugog
operanda
Polje
Polje adrese (1.dio)
prvog
operanda
Polje treeg
operanda
Polje adrese
(2.dio)
68
36
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}
1. operand
{R0}
Nain adresiranja
{apsolutno i reg.ind. s
pomakom}
Adresa
{200}
Proirenje op.koda
{ADD}
3. operand
{R2}
Adresni pomak
{6}
69
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
38
>>>>
71
39
72
40
73
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
zbrajanje - ADD
oduzimanje - SUB
logiki I na bitovima - AND
logiki ILI na bitovima - OR
logiki EKSKLUZIVNI ILI na bitovima - XOR
74
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
43
Rjeenje:
ADD
ADD
SUB
R1, R2, R5
R3, R4, R6
R5, R6, R0
R1, R2, R0
R0, R3, R0
R0, R4, R0
; R1+R2
; R1+R2-R3
; R1+R2-R3-R4
76
44
77
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?
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
registar
79
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
48
R0, (1000)
R1, (1004)
ADD
R0, R1, R2
81
49
(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
50
DW
DW
55
4ABC
83
51
84
52
85
Upravljake naredbe
Za sada imamo:
Aritmetiko-logike naredbe (ADD, SUB, AND, OR, XOR)
Memorijske naredbe (LOAD, STORE)
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
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
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
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
Upravljake naredbe
Nazovimo naredbu bezuvjetnog skoka JP (od JUMP)
adresa
91
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)
adresa
92
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
>>>>
93
10
11
95
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
13
...
97
14
98
15
99
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
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
>
<
>
<
Ispitivani uvjet
C=0 or Z=1
C=1 and Z=0
C=0
C=1
101
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
19
SUB R2,R2,R2
DALJE ...
; AL-operacija
;
;
;
;
;
;
ispitivanje
zastavica
i skok
brii R2
nastavak
programa
Izraunaj Uvjet
Da
C=0 ?
Ne
Pobrii R2
103
20
ADD
JP_C
JP
BRISI SUB
DALJE ...
R0,R1,R2
BRISI
DALJE
R2,R2,R2
104
21
Izraunaj Uvjet
BRISI
Ima li prijenosa ?
PISI
Da
Ne
Upii R2 u REZ
Upii 0 u REZ
105
22
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
;
;
;
;
;
;
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
DW
DW
0
1
107
Strojni kd naredaba
Openito
108
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
26
110
27
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
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
16-0
113
30
Strojni kd naredaba
Iz ovako definiranog strojnog kda vidimo da imamo
neiskoriteno ukupno 18 bitova
opkod
31-27
dest
src1
src2
16-0
114
31
opkod
dest/
src
31-27
26 25-23
adresa
19-0
115
32
dest/
src
31-27
26 25-23
adresa
19-0
116
33
cond
31-27
26 25-22
adresa skoka
19-0
117
34
dest/
src
31-27
26 25-23
opkod
cond
31-27
26 25-22
adresa
19-0
adresa skoka
19-0
118
35
8
8
2
2
1
36
37
121
38
39
123
40
124
41
125
42
Naelna mikroarhitektura
Pogledajmo kako naelno izgleda
mikroarhitektura naeg procesora:
koje dijelove sadri
kako su ti dijelovi povezani
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
44
Upravljaka jedinica
Control
bus
DR
D[0..31]
IR
REG
SR
ALU
AR
PC
A[0..31]
128
45
Upravljaka jedinica
Control
bus
DR
D[0..31]
IR
REG
SR
ALU
AR
PC
A[0..31]
129
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
47
Upravljaka jedinica
Control
bus
DR
D[0..31]
IR
REG
SR
ALU
AR
PC
A[0..31]
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
49
Upravljaka jedinica
Control
bus
DR
D[0..31]
IR
REG
SR
ALU
AR
PC
A[0..31]
133
50
Upravljaka jedinica
Control
bus
DR
D[0..31]
IR
REG
SR
ALU
AR
PC
A[0..31]
51
Upravljaka jedinica
Control
bus
DR
D[0..31]
IR
REG
SR
ALU
AR
PC
A[0..31]
52
Upravljaka jedinica
Control
bus
DR
D[0..31]
IR
REG
SR
ALU
AR
PC
A[0..31]
136
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
54
Upravljaka jedinica
Control
bus
DR
D[0..31]
IR
REG
SR
ALU
AR
PC
A[0..31]
138
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
56
Upravljaka jedinica
Control
bus
DR
D[0..31]
IR
REG
SR
ALU
AR
PC
A[0..31]
140
57
Upravljaka jedinica
Control
bus
DR
D[0..31]
IR
REG
SR
ALU
AR
PC
A[0..31]
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
59
Detaljnija arhitektura i
proirenja skupa naredaba
143
144
Proirenja aritmetiko-logikih
naredaba
145
Proirenja AL-naredaba
Pretpostavimo da treba registar R0 uveati za 20. Sada je
mogue ovakvo rjeenje:
DW
20
146
Proirenja AL-naredaba
Bolje rjeenje bi moglo izgledati ovako:
ADD
R0, 20, R0
Proirenja AL-naredaba
Proirimo naredbu ADD tako da kao drugi operand moe
imati:
registar (kao i do sada)
broj (novo)
dest
src1
src2
16-0
148
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
31-27
26
25-0
149
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
16-0
1 dest
src1
26 25-23 22-20
20-bitni broj
19-0
150
Proirenja AL-naredaba
Teorijski bi mogli imati i oblike:
ADD 20, R1, R2
registar
ADD 20, 30, R4
10
152
11
R0,
R1,
R3,
R2,
R0,
(KONST1)
R0, R0
(KONST2)
R3, R3
R3, R0
; Podaci u memoriji
KONST1
DW 55
KONST2
DW 4ABC
153
12
S novim naredbama
ADD R1, 55, R0
XOR R2, 4ABC, R3
SUB R0, R3, R0
154
13
155
14
156
15
16
158
17
src1,
src1,
src1,
src1,
src1,
src2,
src2,
src2,
src2,
src2,
dest
dest
dest
dest
dest
159
18
160
19
; src1-src2
161
20
162
21
Veina novih naredaba ima isti utjecaj na postavljanje zastavica kao i ranije
definirane naredbe:
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
163
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
nia polurije
R0
via polurije
R1
>>>>
164
23
ROTR
AND
AND
R0, 10, R1
R0,0FFFF,R0
R1,0FFFF,R1
CMP
R1, R0
; usporedba
JP_UGT
JP 200
100
165
24
166
25
C_sel
C_wr
REG
A_sel
A
B_sel
SR_
wr
SR
ALU
OPER_sel
167
26
Proirenja AL naredaba
REG
EXT
IR
SR
ALU
168
27
169
28
LOAD
DW
R1, (BROJ)
32
29
R1,R1,
R1,R1,
R1,0,
R1,0,
R1,0,
R2
R2
R2
R2
R2
171
30
172
31
src, dest
173
32
174
33
MOVE 0FFFF1234, R1
MOVE -100A, R2
>>>>
175
34
176
35
177
36
178
37
REG
EXT
IR
SR
ALU
179
38
Proirenje memorijskih
naredaba
180
181
...
...
. . . . .
0,5 MB koji
se mogu
...
izravno
0007 FFFF adresirati
0000 0000
. . . . .
4095 MB
koji se
ne mogu
izravno
adresirati
183
DZ:
Prouite u knjizi nain formiranja strojnih kodova
memorijskih naredaba
185
; Prvi podatak.
DW 2468
; Drugi podatak.
186
187
188
10
189
11
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
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
14
193
15
16
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
17
196
18
Put podataka
DR
D[0..31]
SHUFFLER
REG
EXT
IR
ALU
AR
SR
A[0..31]
197
19
Proirenje upravljakih
naredaba
198
20
199
21
200
22
A_200000
DW
200000
200000
; neka naredba
201
23
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)
24
...
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
25
...
JP
2100000
...
...
odredite skoka
...
210000C
204
26
...
JP
2100000
...
...
odredite skoka
...
210000C
205
27
...
relativni skok
2100000
...
PC
...
odredite skoka
...
210000C
206
28
...
relativni skok
2100000
...
PC
...
odredite skoka
210000C
...
207
29
30
-0,5 MB
JR
+0,5 MB
209
31
Glavni program
("niske adrese")
0,5 MB
4095 MB
0,5 MB
210
32
A_ODSJECAK
1000
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
A_ODSJECAK
1000
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
>>>>
212
34
A_ODSJECAK
1000
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
36
37
38
217
39
40
219
41
220
42
221
43
222
44
223
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
46
Naini adresiranja
226
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
227
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
228
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
51
230
52
231
53
232
54
233
55
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:
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
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.
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
243
11
244
12
POLJE_NAREDBE
POLJE_KOMENTARA
245
13
14
15
248
16
POLJE_NAREDBE
POLJE_KOMENTARA
PETLJA
249
17
18
Asembleri - Labele
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:
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
21
ORG
adresa
254
22
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
256
24
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
25
memorija:
adresa
20:
24:
28:
sadraj
ADD
STORE
LOAD
258
26
memorija:
adresa
0:
4:
8:
sadraj
ADD
STORE
LOAD
259
27
LABELA
EQU
podatak
260
28
xconas - Pseudonaredba DW
Pseudonaredba DW (define word) slui za izravan upis rijei
(4 bajta) u memoriju (bez prevoenja):
DW
podatci
261
29
xconas - Pseudonaredba DH
Pseudonaredba DH (define half-word) slui za izravan upis
polurijei (2 bajta) u memoriju (bez prevoenja):
DH
podatci
262
30
xconas - Pseudonaredba DB
Pseudonaredba DB (define byte) slui za izravan upis bajta u
memoriju (bez prevoenja):
DB
podatci
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
264
32
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:
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
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
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
Rad s bitovima
est zadatak u asemblerskom programiranju
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
MASKA
LOAD
OR
HALT
R1, (MASKA)
R0, R1, R0
DW
%B 1111
; ostali bitovi su 0
R0, %B 1111, R0
274
42
275
43
R0, 1, R1
PARAN
Najnii bit = 0 ?
NEPARAN MOVE
JR
1, R2
KRAJ
Ne
NEPARAN: R2=1
PARAN
MOVE
KRAJ
HALT
R0, R2
PARAN: R2=R0
44
Poetni broj:
__??____?__???
?=ispitivani bit
Nakon maskiranja: 00??0000?00???
277
45
MOVE
0, R0
IMA_1
HALT
MASKA
DW %B 11000000000000000000000000000011
278
46
Poetni broj:
__??____?__???
Nakon maskiranja:
11??1111?11???
Nakon komplementa:
00??0000?00???
279
47
R1, (MASKA)
R0, R1, R1
R1, -1, R1
IMA_0
SVE_1
IMA_0
MOVE
HALT
0, R0
MASKA
DW %B 10111111111111000000111111100001
; komplementiranje
280
48
Sljedei upis:
0
11110011
Daje rezultat:
0
281
49
____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
. . . . . .
284
52
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
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
289
57
290
58
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
291
59
X+Y+prijenos R
X+Y+C R
292
60
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
62
izlazni bit
nii dio RL
63
RL, 1,
JEDAN
RH, 1,
DALJE
RH, 1,
RH, 1,
Rl
RH
RH
RH
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
R0
X
R1
X
R0
Y
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.
R1
V
R0
X
R1
V
R0
Y
R1
Y
X
R0
298
66
Y
0
1
0
1
operacija
treba ih zamijeniti
treba ih zamijeniti
-
299
67
R0, R1, R3
R3, 1, R3
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
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
Naredba: RET
uzima podatak (povratnu adresu) sa stoga
skae na tu povratnu adresu
305
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
0000 0000
. . . . . . .
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
...
...
FFF4 - FFF7
FFF8 - FFFB
FFFC - FFFF
10000 - 10003
308
tip povratne
vrijednosti
309
10
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
12
Prijenos registrima
312
13
313
14
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
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
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
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
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
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
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
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
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
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
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
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
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
; glavni program
GLAVNI MOVE 10000, SP
LOAD
LOAD
CALL
STORE
R0, (PRVI)
R1, (DRUGI)
NILI
R2, (REZ)
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
330
31
331
32
332
33
>>>>
333
34
R0
R1
R7 tj. SP
GLAVNI MOVE
10000, SP
NILI
. . .
0
0
0
1234ABCD
22445599
0
0
0
P1
P2
R_NILI
PRVI
DRUGI
REZ
FFF8
FFFC
10000
334
35
R0
R1
10000
R7 tj. SP
GLAVNI MOVE
10000, SP
NILI
. . .
0
0
0
1234ABCD
22445599
0
0
0
P1
P2
R_NILI
PRVI
DRUGI
REZ
FFF8
FFFC
10000
335
36
GLAVNI MOVE
10000, SP
NILI
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
GLAVNI MOVE
10000, SP
NILI
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
GLAVNI MOVE
10000, SP
NILI
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
GLAVNI MOVE
10000, SP
NILI
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
GLAVNI MOVE
10000, SP
NILI
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
NILI
LOAD
LOAD
OR
XOR
R0, (P1)
R1, (P2)
R0, R1, R0
R0, -1, R0
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
NILI
LOAD
LOAD
OR
XOR
R0, (P1)
R1, (P2)
R0, R1, R0
R0, -1, R0
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
NILI
LOAD
LOAD
OR
XOR
R0, (P1)
R1, (P2)
R0, R1, R0
R0, -1, R0
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
NILI
LOAD
LOAD
OR
XOR
R0, (P1)
R1, (P2)
R0, R1, R0
R0, -1, R0
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
NILI
LOAD
LOAD
OR
XOR
R0, (P1)
R1, (P2)
R0, R1, R0
R0, -1, R0
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
NILI
LOAD
LOAD
OR
XOR
R0, (P1)
R1, (P2)
R0, R1, R0
R0, -1, R0
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
NILI
LOAD
LOAD
OR
XOR
R0, (P1)
R1, (P2)
R0, R1, R0
R0, -1, R0
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
GLAVNI MOVE
10000, SP
NILI
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
GLAVNI MOVE
10000, SP
NILI
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
GLAVNI MOVE
10000, SP
NILI
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
GLAVNI MOVE
10000, SP
NILI
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
; glavni program
GLAVNI MOVE 10000, SP
NILI
;poziv potprograma
53
<<<<
NILI
; potprogram NILI
LOAD R0, (P1)
LOAD R1, (P2)
OR
XOR
; Izraunavanje
; rezultata.
R0, R1, R0
R0, -1, R0
>>>>
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.
55
R0, (P1)
R1, (P2)
OR
XOR
R0, R1, R0
R0, -1, R0
; Izraunavanje
; rezultata.
RET
355
56
; spremi R0 i R1 na
; fiksne lokacije
LOAD
LOAD
R0, (P1)
R1, (P2)
OR
XOR
R0, R1, R0
R0, -1, R0
; Izraunavanje
; rezultata.
DW
DW
R0, (R0_SPREM)
R1, (R1_SPREM)
0
0
; obnovi vrijednosti
; registara R0 i R1
; Dodatne lokacije za
; spremanje registara
356
57
NILI
PUSH
PUSH
R0
R1
; spremi R0 i R1
; na stog
LOAD
LOAD
R0, (P1)
R1, (P2)
OR
XOR
R0, R1, R0
R0, -1, R0
; Izraunavanje
; rezultata.
R1
R0
357
58
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
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
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
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
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
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
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
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
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
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
370
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
0
pov.adr.
pov.adr.
rezult
FFF0
FFF4
FFF8
FFFC
10000
389
23
; glavni program
GLAVNI MOVE 10000, SP
NILI
;poziv potprograma
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.
391
25
392
26
0
0
0
0
0
0
0
0
FFE0
FFE4
FFE8
FFEC
FFF0
FFF4
FFF8
FFFC
10000
393
27
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
Izvodi se:
SP
0
0
0
0
0
Pov.adr.
par.2
par.1
FFE0
FFE4
FFE8
FFEC
FFF0
FFF4
FFF8
FFFC
10000
395
29
Izvodi se:
Potprogram sprema registre
(koje e mijenjati) na stog
SP
0
0
R2
R1
R0
Pov.adr.
par.2
par.1
FFE0
FFE4
FFE8
FFEC
FFF0
FFF4
FFF8
FFFC
10000
396
30
?
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
0
0
R2
R1
R0
Pov.adr.
par.2
par.1
FFE0
FFE4
FFE8
FFEC
FFF0
FFF4
FFF8
FFFC
10000
398
32
0
0
R2
R1
R0
Pov.adr.
par.2
par.1
FFE0
FFE4
FFE8
FFEC
FFF0
FFF4
FFF8
FFFC
10000
399
33
0
0
R2
R1
R0
Pov.adr.
par.2
par.1
FFE0
FFE4
FFE8
FFEC
FFF0
FFF4
FFF8
FFFC
10000
400
34
0
0
R2
R1
R0
Pov.adr.
par.2
par.1
FFE0
FFE4
FFE8
FFEC
FFF0
FFF4
FFF8
FFFC
10000
401
35
Adrese se
zadaju ovako
(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
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
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
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
406
40
41
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
SP, 8, SP
408
42
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
SP, 8, SP
409
43
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
SP, 8, SP
410
44
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
SP, 8, SP
411
45
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
SP, 8, SP
412
46
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
SP, 8, SP
413
47
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
SP, 8, SP
414
48
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
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
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
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
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
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
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
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
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
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
SP, 8, SP
424
58
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
SP, 8, SP
HALT
rezultat se sprema
izravno iz R0
425
59
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
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
SP, 8, SP
427
61
<<<<
; glavni program
GLAVNI MOVE 10000, 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
; spremi rezultat iz R0
ADD
SP, 8, SP
HALT
PRVI
DRUGI
REZ
>>>>
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
<<<<
65
<<<<
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
parametre
povratnu adresu
spremljene registre
OKVIR
lokalne varijable
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:
433
67
Potprogram:
Okvir:
SP
434
68
Potprogram:
Okvir:
SP
param.n
435
69
Potprogram:
Okvir:
Pozovi potprogram
SP
pov.adr.
param.n
436
70
Potprogram:
Okvir:
Pozovi potprogram
Spremi registre
SP
R2
R1
pov.adr.
param.n
437
71
Potprogram:
Okvir:
Pozovi potprogram
Spremi registre
Stvori lokalne varijable
SP
y
x
R2
R1
pov.adr.
param.n
438
72
Potprogram:
Okvir:
Pozovi potprogram
Spremi registre
Stvori lokalne varijable
SP
y
x
R2
R1
pov.adr.
param.n
439
73
Potprogram:
Okvir:
Pozovi potprogram
Spremi registre
Stvori lokalne varijable
SP
R2
R1
pov.adr.
param.n
440
74
Potprogram:
Okvir:
Pozovi potprogram
Spremi registre
Stvori lokalne varijable
SP
pov.adr.
param.n
441
75
Potprogram:
Okvir:
SP
param.n
442
76
Potprogram:
Okvir:
SP
77
Rekurzivni potprogrami
444
78
Potprogrami - Rekurzija
Treba napisati rekurzivni potprogram za raunanje faktorijela:
fakt(1) = 1
fakt(n) = fakt(n-1)*n
za n= 2, 3, 4, ...
(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
SUB
PUSH
CALL
ADD
R0, 1, R0
R0
FAKT
SP, 4, SP
LOAD
MOVE
ADD
SUB
JR_NZ
R1, (SP+0C)
0, R2
R0, R2, R2
R1, 1, R1
MNOZI
MOVE
R2, R0
POP
POP
RET
R2
R1
>>>>
447
81
<<<<
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, ...
Rjeenje:
Radi lakeg objanjenja, pokaimo prvo kako bi rjeenje moglo
izgledati u programskom jeziku C
>>>>
449
83
<<<<
if ( n == 1 || n == 2 )
return ( 1 );
x = fib ( n-1 );
y = fib ( n-2 );
return ( x+y );
// Fib(1) i Fib(2) = 1
}
main () {
int rez;
rez = fib ( 8 );
}
>>>>
450
84
<<<<
85
LOAD
SP, 10000
MOVE
PUSH
8, R0
R0
CALL
FIB
ADD
STORE
SP, 4, SP
R0, (REZ)
; inicijalizacija stoga
HALT
REZ
DW
; mjesto za rezultat
>>>>
452
86
<<<<
; potprogram FIB
FIB
PUSH
PUSH
R1
R2
; Spremanje
; registara na stog
||
MOVE
LOAD
CMP
JR_EQ
CMP
JR_EQ
R1, 2
VRATI_SE
87
<<<<
; x = fib(n-1)
LOAD
SUB
PUSH
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
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
456
90
main
izvodi se main
okviri na stogu
457
91
main
main
fib(4)
fib(4)
okviri na stogu
458
92
main
main
main
fib(4)
fib(4)
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(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(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(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(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
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
okviri na stogu
468
102
Makronaredbe
469
103
Makronaredbe
Makronaredbe imaju istu namjenu kao i potprogrami
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
NILI
; POZOVI MAKRONAREDBU
STORE
HALT
;;;;;;
PRVI
DRUGI
REZ
R2, (REZ)
; SPREMI REZULTAT
107
474
108
>>>>
109
475
>>>>
476
110
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
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
>>>>
479
113
Makronaredbe - Parametri
Jedna od mogunosti koju makroasembleri obino
nude je i koritenje parametara makronaredaba
MACRO
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
>>>>
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
118
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
120
<<<<
Budui da se ovoj makronaredbi smiju poslati registri kao argumenti,
to bi se dogodilo da se pozove ovako:
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:
\0
C D
stanje bajtova
nije vano
"Slova" (uti) se kopiraju
Razmaci oznaeni sa (zeleni) se saimaju
>>>>
489
Ostali primjeri
Rjeenje:
\0
C D
R2
>>>>
490
Ostali primjeri
R1
A
R2
\0
>>>>
491
Ostali primjeri
R1
A
\0
A
R2
>>>>
492
Ostali primjeri
R1
R2
\0
>>>>
493
Ostali primjeri
R1
R2
\0
>>>>
494
Ostali primjeri
R1
R2
\0
>>>>
495
Ostali primjeri
10
<<<<
SAZMI
PUSH
PUSH
PUSH
PUSH
R0
R1
R2
R3
MOVE
MOVE
LOADB
R3, (R1)
CMP
JR_Z
R3, 0
KRAJ
PETLJA
; Spremi registre
<<<<
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
<<<<
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
R3
R2
R1
R0
; Obnovi registre
RET
; definiranje "konstanti"
SLO
RAZ
EQU
EQU
0
1
500
14
Ostali primjeri
Primjer:
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
16
Ostali primjeri
26
12
Novi element
503
17
Ostali primjeri
Mjesto za ubacivanje je ISPRED prvog vora koji ima veu ili jednaku
vrijednost novom voru.
pokaziva
26
12
Novi element
504
18
Ostali primjeri
26
12
Novi element
505
19
Ostali primjeri
26
pokaziva
12
Novi element
506
20
Ostali primjeri
26
R2
R0
12
Novi element
507
21
Ostali primjeri
26
R2
12
Je li (5 2) ?
R0
Novi element
508
22
Ostali primjeri
26
R2
12
Je li (5 2) ?
R0
Novi element
Ako je:
nali smo mjesto za ubacivanje
509
23
Ostali primjeri
26
R2
12
Je li (5 2) ?
R0
Novi element
Ako nije:
nastavljamo traenje
510
24
Ostali primjeri
26
R0
R2
Pomiemo R1 i R2 za
jedan vor dalje
12
Novi element
511
25
Ostali primjeri
26
R0
R2
Pomiemo R1 i R2 za
jedan vor dalje
12
Novi element
512
26
Ostali primjeri
26
R2
12
Je li (5 3) ?
R0
Novi element
513
27
Ostali primjeri
26
R0
R2
Pomiemo R1 i R2 za
jedan vor dalje
12
Novi element
514
28
Ostali primjeri
26
R0
R2
Pomiemo R1 i R2 za
jedan vor dalje
12
Novi element
515
29
Ostali primjeri
26
R2
12
Je li (5 9) ?
R0
Novi element
30
Ostali primjeri
26
R2
R0
Prespajamo pokazivae
9
12
Novi element
517
31
Ostali primjeri
26
R2
R0
Prespajamo pokazivae
9
12
Novi element
518
32
Ostali primjeri
26
R2
R0
Prespajamo pokazivae
9
12
Novi element
519
33
Ostali primjeri
26
R2
R0
12
505
Novi element
520
34
Ostali primjeri
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
26
R0
R2
I to se ponavlja ...
12
505
Novi element
523
37
Ostali primjeri
26
R0
R2
I to se ponavlja ...
12
505
Novi element
524
38
Ostali primjeri
26
R0
R2
I jo jednom ...
12
505
Novi element
525
39
Ostali primjeri
26
R0
R2
I jo jednom ...
12
505
Novi element
526
40
Ostali primjeri
26
R2
R0
Dok R1 ne doe do
zadnjeg vora, a ...
12
505
Novi element
527
41
Ostali primjeri
26
R2
R0
Dok R1 ne doe do
zadnjeg vora, a ...
R2 postane
NULL-pokaziva
12
505
Novi element
528
42
Ostali primjeri
26
R2
R0
Dok R1 ne doe do
zadnjeg vora, a ...
R2 postane
NULL-pokaziva
505
Novi element
12
43
R6
R5
R2
R1
pov.adr.
NOVI
GLAVA
SP+0
SP+4
SP+8
SP+C
SP+10
SP+14
SP+18
R0, (SP+14)
R6, (R0)
R1, (SP+18)
R2, (R1+4)
>>>>
530
44
<<<<
;;;; PETLJA ZA TRAENJE MJESTA ZA UBACIVANJE
TRAZI CMP
JR_Z
R2, 0
NASAO
JR_ULE NASAO
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
ADD
STORE
POP
POP
POP
POP
R6
R5
R2
R1
;
;
;
;
obnovi
vrijednosti
spremljenih
registara
RET
532
46
Ostali primjeri
Primjer:
276
12
>>>>
533
47
<<<<
Ostali primjeri
>>>>
534
48
Ostali primjeri
#4
276
12
R2 X
535
49
Ostali primjeri
Pomiemo R1 za jedan
vor dalje ...
R1
#4
276
12
R2 X
536
50
Ostali primjeri
Pomiemo R1 za jedan
vor dalje ...
I to se ponavlja sve
dok...
R1
#4
276
12
R2 X
537
51
Ostali primjeri
R1
#4
276
12
R2 X
538
52
Ostali primjeri
R1
#4
276
12
R2 X
539
53
Ostali primjeri
R1
#4
276
12
R2 X
540
54
Ostali primjeri
R0 8
R1
#4
R2 X
276
12
55
Ostali primjeri
#4
R1
276
R2
12
542
56
Ostali primjeri
Pokazivai u vorovima se
prespajaju ovako:
R0
#4
R1
276
R2
12
543
57
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
CMP
JR_Z
R1, 0
IZLAZ
LOAD
JR
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)
OR
JR_Z
R2, R2, R2
DALJE
STORE
R0, (R2+8)
DALJE MOVE
STORE
STORE
0, R0
R0, (R1+4)
R0, (R1+8)
; odspoji pokazivae
; u voru kojeg
; izbacuje iz liste
R2
R0
59
Ostali primjeri
Primjer:
18
24
29
12
25
43
546
60
<<<<
Ostali primjeri
61
<<<<
Ostali primjeri
// "in-order" obilazak
brojac = PISI( cvor -> lijevi );
PRINT( cvor -> broj );
brojac += PISI( cvor -> desni );
return (brojac+1);
}
>>>>
548
62
okvir
brojac
R1
pov.adr
CVOR
SP+0
SP+4
SP+8
SP+C
R1
; spremi registre
SUB
SP, 4, SP
LOAD
MOVE
CMP
JR_Z
R1, (SP+C)
0, R0
R1, 0
VAN
>>>>
63
<<<<
LOAD
PUSH
CALL
ADD
R0,(R1+4) ; cvor->lijevi
R0
okvir
PISI
; PISI()
SP, 4, SP
brojac
R1
pov.adr
CVOR
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
; 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
>>>>
5
554
7
556
8
557
9
558
ulaz
izlaz
K
10
559
ulaz
izlaz
K
0
0
1
1
0
1
0
1
Z
Z
0
1
11
560
12
561
13
562
tri vanjske
jedinice
14
563
tri vanjske
jedinice
15
564
0
procesor
tri vanjske
jedinice
16
565
566
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
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
ADR
ADR
ADR
DATA
DATA
DATA
Multipleksirane
sabirnice
Nemultipleksirane
sabirnice
27
576
577
CLOCK
ADR
stanje visoke
impedancije
valjani podatak
promjena podatka
povratak u visoku
impedanciju
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
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
34
583
Sabirnice - asinkrone
Pojednostavljeni prikaz asinkrone komunikacije (npr. itanje):
1
ADR_STB
ADR
2
DATA
DATA_ACK
Sabirnice - asinkrone
Pojednostavljeni prikaz asinkrone komunikacije (npr. itanje):
1
3
ADR_STB
ADR
2
DATA
itanje
DATA_ACK
Sabirnice - asinkrone
Pojednostavljeni prikaz asinkrone komunikacije (npr. itanje):
1
3
ADR_STB
ADR
2
DATA
4
itanje
DATA_ACK
Sabirnice - asinkrone
Pojednostavljeni prikaz asinkrone komunikacije (npr. itanje):
1
3
ADR_STB
ADR
2
DATA
4
itanje
DATA_ACK
40
589
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
clock
adr[31:0]
rd
wr
wait
data[31:0]
A B C
D E F
>>>>
44
593
clock
adr[31:0]
rd
wr
wait
data[31:0]
A B
C D
>>>>
45
594
clock
CLK_
clk
adr[31:0]
rd
wr
wait
data[31:0]
A B
D1
D2 E F
46
595
596
ADR0 - ADR31
READ
FRISC
WRITE
Memorijski
podsustav
SIZE0 - SIZE1
WAIT
48
597
Memorijski podsustav
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
1
599
600
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
6015
Dohvat
Dekodiranje Izvoenje
ADD
SUB
XOR
Dohvati Dekodiraj
XOR
XOR
T1
T2
T3
T4
Izvedi
XOR
T5
7
603
9
605
Izvoenje
12
607
13
608
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
17
612
Dvociklusne naredbe
Izvoenje slijeda dvociklusnih naredaba:
Dohvat
T1
LOAD
T2
T3
LOAD
JP
T4
T5
T6
Izvoenje
JP
STORE
STORE
18
613
AR)
19
614
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
22
617
DR
D[0..31]
SHUFFLER
IR
EXT
REG
SR
ALU
8
C
AR
PC
A[0..31]
23
618
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
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
29
624
Primjer
Analizirajmo broj perioda potrebnih
programa za zbrajanje dva broja:
LOAD R0, (100)
Dohvat
T1
T2
ADD R0,R1,R2
T4
T3
izvoenje
Izvoenje
T5
ADD R0,R1,R2
T6
STORE R2,(300)
T7
za
ADD R0,R1,R2
STORE R2,(300)
T=7
31
626
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
DR
D[0..31]
SHUFFLER
IR
EXT
REG
SR
ALU
8
C
AR
PC
A[0..31]
33
628
ALU_OUT
AR
REG_B
DR
34
629
DR
D[0..31]
SHUFFLER
IR
EXT
REG
SR
ALU
8
C
AR
PC
A[0..31]
35
630
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
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
AR
(AR)
IR
dekodiranje
R7, 4
ALU
ALU oduzimanje
PC+4
PC
38
633
ALU_OUT
AR
ALU_OUT
R7
REG_B
DR
39
634
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
43
638
44
639
AR
(AR)
IR
dekodiranje
PC+4
PC
sljedeem ciklusu
45
640
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
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
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
52
647
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
54
649
Kombinacijski
sklop sljedeeg
stanja za
neparne
cikluse
Registar
neparnog
stanja
Kombinacijski
sklop sljedeeg
stanja za
parne
cikluse
Registar
parnog
stanja
clk
Ulazni
signali
Upravljaki
signali
55
650
Kombinacijski
sklop sljedeeg
stanja za
neparne
cikluse
Registar
neparnog
stanja
Kombinacijski
sklop sljedeeg
stanja za
parne
cikluse
Registar
parnog
stanja
clk
Ulazni
signali
Upravljaki
signali
Kombinacijski
sklop sljedeeg
stanja za
neparne
cikluse
Registar
neparnog
stanja
Kombinacijski
sklop sljedeeg
stanja za
parne
cikluse
Registar
parnog
stanja
clk
Ulazni
signali
Upravljaki
signali
Kombinacijski
sklop sljedeeg
stanja za
neparne
cikluse
Registar
neparnog
stanja
Kombinacijski
sklop sljedeeg
stanja za
parne
cikluse
Registar
parnog
stanja
clk
Ulazni
signali
Upravljaki
signali
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
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
6577
8
658
Memorijsko UI preslikavanje
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
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
14
664
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
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
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
21
671
Bezuvjetna VJ
Bezuvjetna VJ
adr
data
Upravljaki Upravljaki
dio
dio
registar
proces
rd
wr
22
672
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
26
676
0FFFF0000
TIPKA EQU
0FFFF0010
; Definiranje naziva VJ
Glavni program
PETLJA
LOAD
R0, (TIPKA)
OR
R0, R0, R0
JR_Z
ISKLJUCI
UKLJUCI MOVE
1, R0
ISKLJUCI MOVE
PETLJA
0, R0
PETLJA
677
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
LOAD
CALL
KASNI_5_MINUTA
SUB
R1, 1, R1
;srednju temperat.
; Istekla 3 sata?
JR_NZ PETLJA
HALT
679
R1
LOAD
R1, (SUMA)
ADD
R0, R1, R1
R1, (BROJ_OCITANJA)
ADD
R1, 1, R1
DIJELI
POP
R1
RET
680
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
= 3*109 taktova
; Varijable
SUMA
DW 0
BROJ_OCITANJA
DW 0
SR_TEMP
DW 0
681
Uvjetni prijenos
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
Uvjetna VJ
sinkronizacija
adr
proces
data
Upravljaki Upravljaki
dio
dio
registar
rd
wr
Bistabil
stanja
686
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
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
da
40
689
A+4
BS
S Q
R
wr
clk
rd
Prema
procesu/
vanjskom
ureaju
data[0]
data[31:0]
registar
42
691
43
692
REG EQU
0FFFF0000
BS EQU
0FFFF0004
Glavni program
; Inicijalizacija varijabli
CEKAJ
MOVE
PODACI, R0
MOVE
%D 200,
R1
; adresa podataka
; broja petlje
LOAD
OR
R2, R2, R2
; postavi zastavice
JR_Z
CEKAJ
; ispitaj stanje VJ
SPREMNA LOAD
R2, (R0)
R0, 4, R0
SUB
R1, 1, R1
JR_NZ CEKAJ
HALT
PODACI DW
VJ1
spremna
?
NE
DA
Poslui VJ1
VJ2
spremna
?
NE
DA
Poslui VJ2
45
694
UVJETNA
VJ 1
30 x
FRISC
UVJETNA
VJ 2
46
695
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
LOAD
R1, (PRIMI_1)
; Poslui VJ1
STORE
R0, (BS_1)
LOAD
R0, (BS_2)
OR
R0, R0, R0
JR_Z
CEKAJ_2
STORE
R1, (SALJI_2)
; Poslui VJ2
STORE
R0, (BS_2)
SUB
R3, 1, R3
JR_NZ
CEKAJ_1
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
Memo- 2000 x
rija
VJ 1
FRISC
UVJETNE
VJ 2
49
698
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
R2, 4, R2
; pomakni pokaziva
SUB
R1, 1, R1
; smanji broja
RET
R0, (R2)
R2, 4, R2
SUB
R1, 1, R1
RET
700
Prekidni prijenos
702
Prekidni prijenos
Glavni program
Zahtjev za
prekid od VJ
Prekidni potprogram
za posluivanje VJ
Glavni program
(nastavak izvoenja)
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
4
705
7087
8
709
GIE
0: prihvaanje maskirajueg prekida zabranjeno
1: prihvaanje maskirajueg prekida dozvoljeno
9
710
10
711
11
712
12
713
14
715
15
716
16
717
proces
data
Upravljaki Upravljaki
dio
dio
registar
rd
wr
int
Bistabil
stanja
718
18
719
19
720
20
721
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
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
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
ORG
0C
PUSH
R0
PUSH
R1
MOVE
SR,R0
PUSH
R0
SPREMI
LOAD
R0,(ADR_PODAT)
LOAD
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
STORE R0,(BROJAC)
JR_NZ VAN
STOP
1,R0
STORE R0,(PROC_HALT)
VAN
POP
R0
MOVE
R0,SR
POP
R1
POP
R0
RETN
PROC_HALT DW
; obnova konteksta
; povratak i IIF=1
BROJAC
DW
100
ADR_PODAT
DW
GLAVNI
PETLJA
R0,R0,R0
JR_Z PETLJA
; nastavi ako je 0
HALT
727
27
728
SEND
EQU
0FFFF0000
IACK
EQU
0FFFF0004
IEND
EQU
0FFFF0008
STOP
EQU
0FFFF000C
ORG
MOVE
10000, R7
; poetak izvoenja
JP
GLAVNI
; preskakanje vektora
DW
200
; adresa p.p.
; GLAVNI PROGRAM
GLAVNI
MOVE
1000, R0
; adresa podataka
STORE
R0, (PODATAK)
MOVE
100, R0
STORE
R0, (BROJAC)
; broja podataka
PETLJA
JP
%B 10000, SR
PETLJA
; "koristan posao"
729
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
STORE
R0, (STOP)
; zaustavi VJ
POP
R0
MOVE
R0, SR
POP
R2
POP
R1
POP
R0
; obnavljanje konteksta
; kraj posluivanja
RETI
BROJAC
DW
PODATAK DW
; varijable za p.p.
1000
12, 4, 456A, 1, 0AB, 2, 885, ...
731
34
735
35
736
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
DW
100
738
; prekidni potprogram za
; nemaskirajui prekid na adresi 0C
ORG
0C
PUSH
R0
STORE
POP
R0
STORE
RETN
; Glavni program
GLAVNI
%B 10000, SR
; "koristan posao"
PETLJA
JR
PETLJA
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
LOAD
LOAD
ADD
R0, 1, R0
; broja poslanih
VAN
; kraj posluivanja
; povratak
741
41
742
FRISC VJ
743
Sklop FRISC-CT
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
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
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
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
; 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
; inicijaliziraj CT2
MOVE
%D 10000, R0
STORE
R0, (CTLR2)
MOVE
%B 11, R0
STORE
R0, (CTCR2)
MOVE
%B 10000, SR
; LR2=10000
1000
STORE
CALL
POTP
STORE
RETI
760
Sklop FRISC-PIO
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:
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
itanje BS
PA + 1210
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:
MASK bitovi iz CR
ACTIVE bitovi iz CR
AND/OR bit iz CR
DA
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
EQU
0FFFF0000
PIOD
EQU
0FFFF0004
PIOIACK EQU
0FFFF0008
PIOIEND EQU
0FFFF000C
ORG
MOVE
10000, R7
JP
GLAVNI
ORG
DW
; prekidni vektor
500
; glavni program
MOVE
%B 0100, R0 ; 0(maskirajui)1(prekid)00(izlazni)
; poalji u OCR
MOVE
%B 010000, SR
; dozvoli INT0
PETLJA
JR
PETLJA
BROJAC
DW
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
LOAD
R1, (BROJAC)
; dohvat brojaa
MOVE
ZNAKOVI, R0
ADD
R0, R1, R0
LOADB
R2, (R0)
STORE
R2, (PIOD)
ADD
R1, 1, R1
STORE
R1, (BROJAC)
CMP
R1, %D 80
; je li poslan
JR_NE
JOS
; zadnji znak ?
; poveanje brojaa
772
00, R0
JOS
R0
MOVE
R0, SR
POP
R2
POP
R1
POP
R0
STORE
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
; stavi u PODAT
MOVE
; broj podataka
%D 10, R0
; stavi u BROJAC
775
%B 111100000010111, R0
PETLJA
%B 010, R0
; 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
LOAD
R0, (PODAT)
LOAD
R1, (R0)
; dohvati podatak
ADD
; pomakni adresu na
R0, 4, R0
R0, (BROJAC)
SUB
; sljedei podatak
; dohvati
R0, 1, R0
; i smanji
KRAJ
; ima li jo podataka
%B 011, R0
; broja
POP
R0
MOVE
R0, SR
POP
R1
POP
R0
; poalji u CR
; obnovi kontekst
RETI
777
DMA
778
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
6
783
BREQ
BACK
Upravljanje
prijenosom
CPU
CPU
DMA
DMA
DMA
DMA
DMA
DMA
CPU
7
784
8
785
BREQ
BACK
Upravljanje
prijenosom
CPU
CPU
DMA
CPU
DMA
CPU
DMA
9
786
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
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
broj podataka
adresu izvora
adresu odredita
upravljaku rije
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
INIT
EQU 0FFFF0014
MOVE
10000, SP
; inicijalizacija DMA-sklopa
MOVE
0FFFF3330, R0
; upis adrese
; izvora
MOVE
; upis adrese
4000, R0
; odredita
MOVE
; upis broja
%D 1000, R0
; podataka
%B 0100, R0
; pokretanje DMA-prijenosa
GLAVNI
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
INIT
EQU 0FFFF0014
MOVE
10000, SP
; inicijalizacija DMA-sklopa
MOVE
0FFFF3330, R0
; upis adrese
; izvora
MOVE
; upis adrese
4000, R0
; odredita
MOVE
; upis broja
%D 1000, R0
; podataka
%B 0110, R0
; pokretanje DMA-prijenosa
GLAVNI
CALL
POTPR
CEKAJ
LOAD
AND
R0, 1, R0
JR_Z
CEKAJ
; brisanje BS DMA
GOTOVO
; nastavak glavnog programa
800
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
24
801