Predavanja - FSR web : www.fsr.ba

1. Zahtjevi na arhitekturu digitalnog računala
Zahtjeve na arhitekturu digitalnog računala odreñuje njegov direktni korisnik, a to je
prvenstveno programer koji programira u C-u.
Programski jezik C zahtjeva računalo koje može izvoditi:
• aritmetičke i logičke naredbe:
o aritmetičke: zbroji, oduzmi, pomnoži, podijeli
o logičke: I, ILI, EXOR, NE, …
o naredbe nad bitovima: I, ILI, EXOR, NE, …, posmak, rotacija
• naredbe za upravljanje programskim tokom,
o bezuvjetna: goto
o uvjetna: if, if-else, swich, while, do-while, for
Aritmetičke i logičke operacije te operacije nad bitovima izvode se nad elementarnim
tipovima podataka:
• znakovi (char)
• cjelobrojni (int)
• s pomičnim zarezom jednostruke preciznosti (float)
• s pomičnim zarezom dvostruke preciznosti (double)
Osim postavljenih zahtjeva programera treba voditi računa da se računalo treba realizirati
pomoću digitalnih sklopova.
Polazeći od navedenog slijedi da računalo opće namjene se mora sastojati od dvije
funkcionalne cjeline: jedne u koju će biti zapisane naredbe i podaci te druge koja će sukladno
zapisanim naredbama izvoditi obradu nad podacima. Naredbe i podaci zapisuju se u zaseban
sklop koji se naziva memorija, a obrado podataka sukladno zadanim naredbama izvodi
procesor. Rješenje računala opće namjene prikazano na Slika 1.1. Ovakav model poznat je po
nazivu Von Neumanov model računala.
Slika 1.1 Von Neumanov model računala.
1.1. Način zapisivanja podataka u memoriju
Cjelobrojni podaci se u memoriju zapisuju u binarnom obliku . Za prikaz negativnih brojeva
koristi se dvostruki komplement.
BINARNI BROJEVNI SUSTAV
Brojevni sustav s bazom brojanja B ima znamenke 0, 1, 2, ... , B-1
Npr. u dekadskom sustavu B=10, a znamenke su 0, 1, 2, ..., 8 i 9.
Ako je baza B=2 dobiva se binarni brojevni sustav, čije znamenke su 0 i 1.
Iz engleskog BInary digiT nastalo je ime za najmanju količinu informacije BIT.
Primjer zapisivanja brojeva:
5710 = 5 * 101 + 7 * 100 = 1*25 + 1*24 + 1*23 + 0*22 + 0*21 + 1*20 = 1 1 1 0 0 1 2
Za binarno prikazivanje informacija je potreban najveći broj elemenata u usporedbi s ostalim
prikazima, a broj bita za prikaz brojeva je iz tehničkih razloga ograničen .
Ureñaji koji obrañuju i pohranjuju binarne informacije fizički se izvode pomoću elektroničkih
elementa s 2 stabilna stanja (bistabil), koji su vrlo brzi i jeftini.
Pretvorba dekadskog broja u binarni
Binarni broj tvore ostaci dijeljenja s 2, odozdo prema gore
57 : 2 = 28
1
28 : 2 = 14
0
14 : 2 = 7
0
7:2= 3
1
3:2= 1
1
1:2= 0
1
1
1
1
0
0
1
NEGATIVNI BINARNI BROJEVI
Registar je skup memorijskih elemenata koji pamte znamenke binarnog broja što znači da je za
odreñeno računalo unaprijed propisana dužina registra, a time i brojevno područje unutar kojeg se
kreću brojevi.
Primjer: Operacija 7 - 5 u računalu s registrom od 4 bita obavit će se kao
7 + (-5). Binarni prikaz broja -5 je sljedeći:
Pozitivni broj
0101
Komplement do baze-1
(jedinični komplement)
Komplement do baze
(dvojni komplement)
1111
+ 0101
1010
+ 0001
1010
Dokaz da je dobiveni broj - 5
1 0 1 1 (- 5)
+ 0 1 0 1 (+5)
1011
Operacija oduzimanja 7 - 5
0 1 1 1 ( 7)
+ 1 0 1 1 (-5)
0000
Preljev 1
0010
Preljev 1
U registru s 3 bita, ako je prvi bit predznak mogu se prikazati sljedeći brojevi:
Dekadski broj
0
1
2
3
Binarni broj
000
001
010
011
-4
-3
-2
-1
100
101
110
111
Za n = 3 dobije se interval [-22, 22 - 1],
Za n = 8 taj je interval
[-27, 27- 1 ], tj. [-128, 127].
Općenito: [-2n-1, 2n-1 - 1].
Dodavanjem jedinice najvećem prikazinom cijelom broju, dobit će se najmanji prikazini cijeli
broj (npr. za n=8 , 127 + 1 -128) , odnosno oduzimanjem jedinice od najmanjeg prikazinog
cijelog broja dobit će se najveći prikazini broj (npr. za n=8 , -128 – 1 127)
OKTALNI BROJEVNI SUSTAV
Baza sustava je B=8 a znamenke su 0, 1, 2, 3, 4, 5, 6, 7.
Koristi se za skraćeno zapisivanje binarnih sadržaja kada je to spretno.
Primjer:
36-bitni broj
oktalni broj
001
1
110
6
000 101 111 001 010 011
0
5
7
1
2
3
111
7
000
0
100
4
001
1
HEKSADEKADSKI BROJEVNI SUSTAV
Baza sustava je B = 16, a znamenke su 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.
Koristi se za skraćeno zapisivanje binarnog sadržaja.
Primjer:
16-bitni broj
heksadekadski ekviv.
0111
7
1011
B
0011
3
1110
E
RAZLOMLJENI BINARNI BROJEVI
Razlomljeni binarni brojevi sadrže "binarnu točku", analogno decimalnom zarezu, odnosno točki
u anglo-američkoj notaciji.
Primjer: prikaz razlomljenih brojeva
5.75 10
= 5 * 100 + 7 * 10-1 + 5 * 10-2 =
= 1*22 + 0*21 + 1*20 + 1*2-1 + 1*2-2 = 1 0 1 . 1 1 2
Pretvaranje decimalnog broja u binarni
Cjelobrojni dio dekadskog broja pretvara se u binarni uzastopnim dijeljenjem, a decimalni
uzastopnim množenjem s 2, gdje cjelobrojni dio dobivenih produkata tvori znamenke binarnog
razlomka.
Primjer: pretvaranje decimalnih brojeva koji se ne mogu prikazati konačnim brojem binarnih
frakcija
Treba uočiti da se konačni decimalni razlomak prikazuje kao beskonačni periodički binarni
razlomak.
Binarni broj se množi s potencijama baze 2 tako da se binarna točka pomakne odgovarajući broj
mjesta desno ili lijevo, zavisno da li je predznak potencije pozitivan ili negativan.
Primjer: 1 . 1 1 * 22 = 1 1 . 1
PRIKAZ REALNIH BROJEVA U RAČUNALU
Standardna točnost: 32 bita (4 byte)
Dvostruka točnost: 64 bita (8 byte)
Realni brojevi standardne točnosti
Deklaracija u programskom jeziku C: float
IEEE (Institute of Electrical and Electronics Engineers) standard 754 za prikaz realnih brojeva u
standarnoj točnosti:
31
30
24
P
23
0
eksponent
P
Karakteristika
Mantisa
mantisa
predznak ( P=1 negativan, P=0 pozitivan)
binarni eksponent + 127 (da se izbjegne prikaz negativnog eksponenta)
normalizirana (samo jedan bit ispred binarne točke).
Primjer: prikazati dekadski broj 5.75
5.7510 = 101.112 * 20 = 1.01112 * 22
Kako se normalizacijom svakog binarnog broja (osim nule) postiže oblik 1.xxxxx, vodeća
jedinica ne pohranjuje se u računalu i naziva se skrivenim bitom.
Time se štedi jedan bit što povećava točnost.
Predznak = 0 (pozitivan broj)
Binarni eksponent = 2
Mantisa (cijela)
Mantisa (bez skrivenog bita)
K = 2 + 127 = 129 = (1000 0001)2
1.0111
0111
Rezultat:
0 10000001
01110000000000000000000
ili
0100
4
0000 1011 1000 0000 0000 0000 0000 binarno
heksadecimalno
0
B
8
0
0
0
0
Primjeri:
2 = 102 * 20 = 12 * 21 = 0100 0000 0000 0000 ... 0000 0000 = 4000 0000 hex
P = 0, K = 1 + 127 = 128 (10000000), M = (1.) 000 0000 ... 0000 0000
-2 = -102 * 20 = -12 * 21 = 1100 0000 0000 0000 ... 0000 0000 = C000 0000 hex
Jednako kao 2, ali P = 1
4 = 1002 * 20 = 12 * 22 = 0100 0000 1000 0000 ... 0000 0000 = 4080 0000 hex
Jednaka mantisa, BE = 2, K = 2 + 127 = 129 (10000001)
6 = 1102 * 20 = 1.12 * 22 = 0100 0000 1100 0000 ... 0000 0000 = 40C0 0000 hex
1 = 12 * 20 = 0011 1111 1000 0000 ... 0000 0000 = 3F80 0000 hex
K = 0 + 127 (01111111).
.75 = 0.112 * 20 = 1.12 * 2-1 = 0011 1111 0100 0000 ... 0000 0000 = 3F40 0000 hex
Poseban slučaj - 0:
Normalizacijom broja 0 ne može se dobiti oblik 1.xxxxx
0 = 0 0000000 0000 ... tj. kao 1.02 * 2-127
Raspon i točnost realnih brojeva
Za slučaj realnog broja standardne točnosti karakteristika (8 bita) se može nalaziti u intervalu
[0,255].
Specijalni slučajevi karakteristike su 0 i 255, pa obzirom da je BE = K - 127, BE se može kretati u
intervalu [-126,127].
Kada je K = 0 i svi bitovi mantise nula radi se o broju nula.
Kada je K = 0 i postoje binarne frakcije u mantisi tada je to denormalizirani broj, tj. više ne postoji
skriveni bit.
Kada je K = 255 i svi bitovi mantise nula radi se o prikazu +∞ illi -∞ ovisno od predznaka P
Kada je K = 255 i postoje binarne frakcije u mantisi ne radi se o prikazu broja (NaN)
Najmanji pozitivni broj ≠ 0 koji se može prikazati je:
0.000000000000000000000012 *2-126 što iznosi 1.401298464324817*10-45
a najveći je:
1.111111111111111111111112 * 2127 ≈ 2128 = 3.402823669209*1038
Točnost: 24 binarne znamenke
224 ≈ 10x 24 log 2 ≈ x log 10 x ≈ 24 log 2 = 7.224719895936
tj. približno 7 prvih važećih točnih znamenki.
Prikaz pomoću brojevnog pravca:
-3.4*1038
-1.4*10-45
0
1.4*10-45
Numeričke pogreške
Nemogućnost korištenja svih bita kod računanja
Primjer: 0.000110 + 0.990010
0.000110 :
(1.)101000110110111000101112 * 2-14
0.990010 :
(1.)111110101110000101000112 * 2-1
Kod zbrajanje, binarne točke moraju biti poravnate:
.000000000000011010001101 * 20 Samo 11 od 24 bita!
+.111111010111000010100011 * 20
.111111010111011100110000 * 20 = 0,990099906921410
3.4*1038
Realni brojevi dvostruke točnosti
Deklaracija u programskom jeziku C: double
63
62
P
52
51
eksponent
P
Karakteristika
Mantisa
0
mantisa
predznak ( P=1 negativan, P=0 pozitivan)
binarni eksponent + 1023 (da se izbjegne prikaz negativnog eksponenta)
normalizirana (samo jedan bit ispred binarne točke).
Raspon:
K ∈ [0,2047].
BE = K - 1023
BE ∈ [-1022,1023]
Specijalni slučajevi: K=0 i K=2047
Kada je K = 0 i svi bitovi mantise nula radi se o broju nula
Kada je K = 0 i postoje binarne frakcije u mantisi tada je to denormalizirani broj, tj. više ne postoji
skriveni bit
Kada je K = 2047 i svi bitovi mantise nula radi se o prikazu +∞ ili -∞ ovisno o predznaku P
Kada je K = 2047 i postoje binarne frakcije u mantisi tada se ne radi o prikazu broja (Nan)
Najmanji pozitivni broj različit od nule koji se može prikazati je:
0.0000 ...0012 * 2-1022 što je 4.9406 * 10-324
a najveći je:
1.1111.....1111112 * 21023 ≈ 21024 = 1.797693134862316*10308
Točnost: 53 binarne znamenke
253 ≈ 10x 53 log 2 ≈ x log 10 x ≈ 53 log 2 = 15.95458977019
tj. približno 16 prvih važećih točnih znamenki.
Postoji još i long double, meñutim, njegova veličina ovisi o platformi, pa se tako mogu naći
implementacije u kojima je njegova veličina 64,80,96 ili 128 bita. ANSI standard propisuje da
nije manji od double broja. Primjer raspodjele ako je njegova veličina 80 bita:
long double
80 bita
Karakteristika: 15 bita
Binarni eksponent: Karakteristika – 16383
1.2. Prikaz naredbi
Kako je već navedeno računalo treba izvoditi aritmetičke i logičke naredbe, te naredbe za
upravljanje programskim tokom. Prikaz naredbi definirati će se na primjeru jedne aritmetičke
naredbe:
rez = op1 + op2
Nazivi varijabli su ekvivalent memorijskih adresa na kojima se varijabla pohranjuje. Sadržaj
te memorijske lokacije je vrijednost varijable. Tako npr. op1 je smješten na adresi 100 čiji
sadržaj je 10, a op2 na adresi 101 čiji sadržaj je 15. Rezultat, rez smješten je na adresi 102 i
sadržaj prije operacije je 0.
Slika 1.2 Način pohrane varijabli u memoriji računala.
Sukladno navedenome naredba sadrži sljedeće informacije:
operacija
adresa rezultata
adresa operanda 1
adresa operanda 2
+
102
100
101
Adrese su numerički podaci koje je moguće prikazati u binarnom obliku. Operaciju je moguće
proizvoljno kodirati kao u primjeru:
Naredba
Simbol
zbrajanje
oduzimanje
množenje
dijeljenje
ostatak dijeljenja
I nad bitovima
ILI nad bitovima
EXOR nad bitovima
NE nad bitovima
itd
+
*
/
%
AND
OR
EXOR
NOT
Operacijski Operacijski
kod
kod binarno
0
0000
1
0001
2
0010
3
0011
4
0100
5
0101
6
0110
7
0111
8
1000
Tablica 1.1 Naredbe kao i pripadajući operacijski kodovi.
Na ovaj način sve informacije mogu se zapisati u binarnom obliku. Neka računalo može
adresirati 4Gbyta memorije slijedi da je za prikaz adresa potrebno 32 bita, a neka ima do 15
operacija pa je njih moguće prikazati s 4 bita. Sada je naredbu moguće prikazati na način:
Operacijski kod
4 bita
Adresa rezultata
32 bita
Adresa operanda 1
32 bita
100 bita
Adresa operanda 2
32 bita
Definiranje rasporeda polja u naredbi i njihovo značenje naziva se format naredbe. Ovakva
naredba zauzima 12 okteta i 4 bita. U praksi je dobro da naredba zauizima cijeli broj okteta, u
ovom primjeru 13, pa se polje operacijskog koda proširuje za dodatna četiri bita i naredba
sada ima sljedeći format:
Op.
kod
8 bita
Adresa rezultata
Adresa operanda 1
Adresa operanda 2
32 bita
32 bita
32 bita
104 bita
Ovim je definiran prikaz varijabli i naredbi u memoriji računala. Slijedi opis izvoñenja
naredbe.
1.3. Izvoñenje naredbi – princip rada procesora
Kako je već prije opisano sve naredbe i podaci zapisani su u binarnom obliku u memoriji
računala. Da bi izveo operaciju procesor mora imati informaciju gdje se nalazi naredba koju
treba izvesti, odnosno njenu adresu. Tu adresu procesor treba imati u jednom zasebnom
spremniku. Kada se s te adrese dohvati naredba procesor je interno pohrani da bi mogao
kasnije izvesti operaciju. Za očekivati je da se sljedeća naredba koju treba izvesti nalazi
neposredno iza naredbe koja se trenutno izvodi. Zato se sadržaj spremnika koji sadrži adresu
naredbe koju treba izvesti inkrementira za veličinu naredbe.
Sukladno namjeni spremnik u kojem je pohranjena adresa sljedeće naredbe koju treba izvesti,
a koji se nakon dohvata naredbe inkrementira da pokazuje na sljedeću naredbu se naziva
programsko brojilo (program counter) skr. PC. Spremnik u koji se privremeno pohrani
naredba dok se operacija ne izvede naziva se spremnik naredbe (instruction register) skr.
IR.
Korak prebacivanja naredbe iz memorije u procesor i priprema za dohvat sljedeće naredbe
naziva se dohvat naredbe.
Nakon što je naredba iz memorije prebačena u procesor, procesor mora izvesti naredbu. Kao
prvi korak izvoñenja naredbe je dohvat prvog operanda s adrese koja je sastavni dio naredbe
te njegova privremena pohrana u procesor. Sljedeći korak je dohvat drugog operanda. Kad su
u operandi dohvaćeni slijedi izvoñenje operacije temeljem operacijskog koda. Procesor mora
imati zaseban sklop za izvoñenje aritmetičkih i logičkih operacija koji se naziva aritmetička i
logička jedinica (arithmetical and logical unit) skr. ALU. Nakon što se izvede operacija
rezultat se privremeno pohrani u jedan spremnik. Zadnji korak je upis rezultata natrag u
memoriju na adresu odreñenu naredbom.
Korak dohvata operanda, izvoñenja operacije te pohrana rezultata u memoriju naziva se
izvoñenje naredbe.
Cijeli ciklus sastoji se od dva koraka: dohvata naredbe (fetch) i koraka izvoñenja naredbe
(execute).
Cijeli postupak prikazan je na primjeru jednostavne aritmetičke naredbe u C-u:
int
x = 20, y = 30, z = 10, rez;
rez = x + y – z;
Operandi x, y, z i rez zauzimaju po svaka po četiri uzastopne memorijske lokacije. Kao
primjer uzeti će se da je:
adr x ≡ 100
adr y ≡ 104
adr z ≡ 108
adr rez ≡ 112
Memorijske lokacije koje zauzima x, y i z se inicjaliziraju na zadane vrijednosti.
Aritmetička naredba izvodi se u dva koraka:
rez = x + y;
rez = rez - z;
Sukladno Tablica 1.1 u kojoj je dan primjer operacijskih kodova naredbe se kodiraju na način:
rez = x + y;
Op. kod +
0
Adr, rez. rez
112
Adr, op1. x
100
Adr, op2. y
104
rez = rez – z;
Op. kod 1
Adr, rez. rez
112
Adr, op1. rez
112
Adr, op2. z
108
Početno stanje procesora prikazano je na sljedećoj slici:
Slika 1.3 Početno stanje računala prije nego se pokrene izvoñenje naredbi.
Izvoñenje programa počinje od adrese 0 koja je zapisana u programskom brojilu PCu. Sa
adrese 0 13 okteta se prebaci u spremnik naredbe IR te se programsko brojilo PC inkrementira
za 13 da pokazuje na sljedeću naredbu.
Ukoliko se prebacuje oktet po oktet tada ova faza traje 13 taktova.
MEMORIJA
0
0
112
100
104
PROCESOR
13
PC
IR
12
13
Op.
code
adr.
rez
adr.
op1
0
112
100
adr.
op2
1
112
112
108
104
25
100
20
ALU
103
104
30
107
108
10
111
112
0
115
x
y
z
rez
Slika 1.4 Dohvat prve naredbe
Ovim je završena faza dohvata naredbe. Slijedi faza izvoñenja naredbe.
Temeljem operacijskog koda zaključuje se da se radi o operaciji za zbrajane, te slijedi dohvat
prvog operanda. Adresa operanda (100) upisana je u trećem polju spremnika naredbe IR. S te
adrese operand se prebacuje u privremeni spremnik procesora. Neka je za dekodiranje
naredbe potreban jedan takt, a za dohvat četiri okteta još četiri takta. Ova faza prikazana je
sljedećom slikom
MEMORIJA
0
0
112
100
PROCESOR
12
13
13
PC
IR
104
Op.
code
adr.
rez
0
112
adr.
op1
100
adr.
op2
1
112
112
108
104
25
20
20
ALU
30
10
0
Slika 1.5 Dohvat prvog operanda prve naredbe.
100
103
104
107
108
111
112
115
x
y
z
rez
Slijedi dohvat drugog operanda. Adresa operanda (104) upisana je u četvrtom polju spremnika
naredbe IR. S te adrese operand se prebacuje u privremeni spremnik procesora. Za dohvat
četiri okteta potrebno je četiri takta. Ova faza prikazana je sljedećom slikom:
MEMORIJA
0
0
112
100
104
PROCESOR
13
PC
IR
12
13
Op.
code
adr.
rez
adr.
op1
0
112
100
adr.
op2
1
112
112
108
104
25
20
30
100
20
ALU
103
104
30
107
108
10
111
112
0
115
x
y
z
rez
Slika 1.6 Dohvat drugog operanda prve naredbe.
Nakon što su dohvaćeni operandi izvodi se operacija. Rezultat operacije upisuje se u
privremeni spremnik. Neka je za izvoñenje operacije potrebno jedan takt.
MEMORIJA
0
0
112
100
PROCESOR
12
13
13
PC
IR
104
Op.
code
adr.
rez
adr.
op1
0
112
100
adr.
op2
1
112
112
108
104
25
20
30
20
ALU
50
30
10
0
Slika 1.7 Izvoñenje operacije.
100
103
104
107
108
111
112
115
x
y
z
rez
Posljednji korak u izvoñenju naredbe je pohrana rezultata na adresu (112) specificiranu
drugim poljem naredbe. Neka je za prebacivanje četiri okteta iz procesora u memoriju
potrebno četiri takta.
MEMORIJA
0
0
112
100
PROCESOR
104
12
13
13
PC
Op.
code
adr.
rez
0
112
IR
adr.
op1
100
adr.
op2
1
112
112
108
104
25
20
30
20
ALU
30
10
50
50
100
x
103
104
y
107
108
111
112
115
z
rez
Slika 1.8 Pohrana rezultata prve naredbe natrag u memoriju.
Ovim je završen cijeli ciklus dohvata i izvoñenja prve naredbe.
U sljedećoj tablici dan je rezime trajanja dohvata i izvoñenja naredbe.
trajanje
(takt)
faza
dohvat naredbe
izvoñenje naredbe
dohvat naredbe 13 okteta
inkrementiranje PC-a
dekodiranje
dohvat 1. operanda
dohvat 2. operanda
ALU operacija
pohrana rezultata
UKUPNO
13
1
4
4
1
4
27
Iz tablice može se zaključiti da cijeli ciklus relativno dugo traje, ukupno 27 taktova. Takoñer.
veliki dio vremena troši se na dohvat naredbe čemu je razlog relativno velika naredba 13
okteta.
Slijedi izvoñenje druge naredbe. Ciklus dohvata naredbe identičan je kao i za prvu naredbu.
Slijedi dekodiranje naredbe i dohvat operanada, izvoñenje operacije te pohrana rezultata.
Cijeli ciklus prikazan je na sljedećoj slici:
Slika 1.9 Ciklus izvoñenja druge naredbe.
Ovim je razrañen jedan mogući princip rada računala. U ovom konceptu operandi se
dohvaćaju direktno iz memorije te se rezultat takoñer pohranjuju natrag u memoriju. Naredba
sadrži operacijski kod te tri adrese (dva operanda i rezultat).
Cilj je prilikom projektiranja računala dobiti računalo koje je na istoj tehnološkoj osnovi:
•
•
brže
bolje koristi resurse računala (memoriju i spremnike procesora)
Analizirajući rješenje predloženo prethodnim tekstom mogu se uočiti sljedeći nedostaci:
1. naredba je relativno velika pa dohvat naredbe relativno dugo traje
2. nakon što je izvedena prva naredba, njen rezultat koji je ujedno u operand sljedeće
naredbe prvo se vrati u memoriju, a onda u sljedećoj naredbi ponovo iz memorije
vraća u procesor
Drugi nedostatak relativno se često dešava posebice kod složenih aritmetičkih izraza koji
rezultiraju nizom kumulativnih naredbi (rezultat prethodne je operand sljedeće). U ovom
slučaju poboljšanje je lako napraviti na način da se rezultat umjesto da se upisuje u memoriju
proslijedi kao rezultat sljedećoj naredbi. Rezultat operacije upisuje se u poseban spremnik u
kojem automatski postaje jedan operand sljedeće naredbe. Kako se u ovom spremniku
kumuliraju rezultati naredbi on se naziva akumulator. Navedeno rezultira sljedećim
konceptom procesora:
MEMORIJA
0
4
PROCESOR
8
PC
12
16
IR
op1/rez
op2
Acc
20
ALU
30
10
0
100
103
104
107
108
111
112
115
x
y
z
rez
Slika 1.10 Koncept procesora s akumulatorom
Kako u predloženom konceptu procesora jedan operand i rezultat se obavezno nalaze u
akumulatoru tako njih nije potrebno specificirati u naredbi. Na ovaj način naredba poprima
oblik:
Op.
kod
8 bita
Adresa rezultata
32 bita
Naredba je sada samo 40 bita odnosno 5 okteta. Na ovaj način napravljena je ušteda u
korištenju memorije, a i potrebno je znatno kraće vrijeme dohvata naredbe. Takoñer, nije
potrebno dohvaćati jedan operand te spremati rezultat natrag u memoriju. Sukladno
navedenome trajanje izvoñenja naredbe iznosilo bi:
trajanje
(takt)
faza
dohvat naredbe
izvoñenje naredbe
dohvat naredbe 5 okteta
inkrementiranje PC-a
dekodiranje
dohvat 2. operanda
ALU operacija
UKUPNO
5
1
4
1
11
Usporedbom s prethodnim konceptom procesora s tri adrese, kod procesora s akumulatorom
izvodi se naredba 27/11 ≈ 2,5 puta brže.
Da li je procesor temeljen na akumulatoru stvarno toliko brži?
Odgovor na ovo pitanje može se dobiti ukoliko se analizira izvoñenje istog programskog
odsječka kao u prethodnom rješenju na ovom procesoru.
int
x = 20, y = 30, z = 10, rez;
rez = x + y – z;
gdje su varijable x, y, z i rez na istim adresama kao u prethodnom primjeru.
Procesor s akumulatorom očekuje u akumulatoru jedan operand. Da bi se mogao inicijalno
napuniti akumulator s prvim operandom nekog kumulativnog računa potrebno je uvesti
zasebnu naredbu koja sadržaj memorijske lokacije upisuje u akumulator. Zato se uvodi
naredba load koja prebacuje sadržaj memorijske lokacije u akumulator.
Na sličan način kad se završi kumulativni račun potrebno je rezultat vratiti u memoriju. Zato
se uvodi naredba store koja prebacuje sadržaj akumulatora u zadanu memorijsku lokaciju.
Naredbe load i store su naredbe za prijenos podataka. Ove naredbe nemaju AL operaciju i
zato traju za jedan takt manje od AL operacija.
Zadani primjer na procesoru s akumulatorom izvodio bi se preko sljedećeg niza naredbi:
1.
2.
3,
4,
naredba
load 100
zbroji 104
oduzmi 108
store 112
opis
sadržaj x adr. 100 u akumulator, acc = 30
acc = acc + y , acc = 50
acc = acc - z , acc = 40
sadržaj acc na adresu z (112), z = 40
trajanje
UKUPNO
10
11
11
10
42
Na procesoru koji je temeljen na naredbama s tri adrese izvoñenje ovog primjera trajalo je
2*27 = 54 takta, a na procesoru temeljenom na akumulatoru 42. Slijedom navedenog ubrzanje
koje se dobiva novim konceptom je svega 54/42 odnosno oko 25%. Slično razmatranje vrijedi
i za korištenje memorije budući da procesor s akumulatorom zahtjeva četiri naredbe te
program zauzima 20 okteta usporedbi s 26 okteta kod prvobitne varijante (30% uštede).
Navedena razmatranja vode zaključku da je dobit procesora s akumulatorom to veća ukoliko
su kumulativni izrazi veći, dok ukoliko nema kumulativnog računanja zbog potrebe učestalog
donosa operanda u akumulator i pohrane rezultata u memoriju ovakav procesor može iskazati
čak i lošije performanse.
Izvoñenje naredbi na procesoru s akumulatorom prikazano je sljedećom slikom:
MEMORIJA
MEMORIJA
0
0
load 100
load 100
4
5
PROCESOR
5
IR
9
10
0
PC
4
5
PROCESOR
zbroji 104
14
15
load 100
op1/rez
Acc
IR
store 112
19
op2
20
ALU
30
10
0
100
103
104
107
108
111
112
115
9
10
5
PC
oduzmi 108
zbroji 104
oduzmi 108
14
15
load 100
op1/rez
Acc
20
x
store 112
19
op2
20
ALU
y
30
z
10
rez
0
MEMORIJA
IR
9
10
op1/rez
Acc
20
14
15
IR
store 112
19
op2
20
ALU
30
10
0
100
103
104
107
108
111
112
115
9
10
oduzmi 108
14
15
zbroji 104
op1/rez
Acc
20
x
store 112
19
op2
30
20
ALU
y
30
z
10
rez
0
MEMORIJA
4
5
IR
op1/rez
Acc
50
14
15
IR
store 112
19
20
30
10
0
100
103
104
107
108
111
112
115
15
rez
x
9
10
oduzmi 108
oduzmi 108
op1/rez
Acc
50
30
ALU
115
z
zbroji 104
10
PC
oduzmi 108
op2
111
112
y
4
5
PROCESOR
9
10
zbroji 104
107
108
x
load 100
zbroji 104
10
103
104
0
load 100
PC
100
MEMORIJA
0
PROCESOR
rez
zbroji 104
10
PC
oduzmi 108
zbroji 104
115
z
4
5
PROCESOR
zbroji 104
5
111
112
y
load 100
4
5
PC
107
108
x
0
load 100
10
103
104
MEMORIJA
0
PROCESOR
100
14
15
store 112
19
op2
30
ALU
20
y
30
z
10
rez
0
100
103
104
107
108
111
112
115
x
y
z
rez
MEMORIJA
MEMORIJA
0
0
load 100
load 100
4
5
PROCESOR
IR
9
10
15
PC
4
5
PROCESOR
zbroji 104
oduzmi 108
op1/rez
Acc
50
14
15
IR
store 112
19
op2
20
ALU
30
10
0
100
103
104
107
108
111
112
115
oduzmi 108
14
15
oduzmi 108
op1/rez
Acc
40
10
9
10
15
PC
oduzmi 108
zbroji 104
x
store 112
19
op2
10
20
ALU
y
30
z
10
rez
0
MEMORIJA
100
103
104
107
108
111
112
115
IR
9
10
14
15
IR
store 112
19
op2
ALU
20
30
10
0
100
103
104
107
108
111
112
115
x
9
10
oduzmi 108
14
15
store 112
op1/rez
Acc
40
10
zbroji 104
20
PC
oduzmi 108
store 112
op1/rez
Acc
40
4
5
PROCESOR
zbroji 104
15
rez
load 100
4
5
PC
z
0
load 100
20
y
MEMORIJA
0
PROCESOR
x
store 112
19
op2
10
ALU
20
y
30
z
10
rez
40
100
103
104
107
108
111
112
Slika 1.11 Izvoñenje programskog odsječka na procesoru s akumulatorom.
Primjer:
Usporedi izvoñenje sljedećeg programskog odsječka na oba tipa procesora:
int
x = 10, y = 20, z = 30, a = 5, b = 15, c = 25, rez;
rez = (y + z)*x + (b + c)*a;
Rješenje:
Procesor s tri adrese
naredbe
trajanje
temp = y + z
26
temp = temp*x
26
rez = b + c
26
rez = rez*a
26
rez = rez + temp
26
Procesor s akumulatorom
naredbe
trajanje
load y
10
zbroji z
11
pomnoži x
11
store rez
10
load b
10
zbroji c
11
pomnoži a
11
zbroji rez
11
store rez
10
130
95
115
x
y
z
rez
Procesor s akumulatorom približno je 35% brzi od procesora s tri adrese.
Ali, iz navedenog primjera može se vidjeti da ukoliko bi procesor imao više akumulatora, u
kojima bi bilo moguće pohraniti meñurezultate proračuna dobilo bi se još veće ubrzanje. Na
tragu ovog zaključka iznjedrio se novi koncept procesora. Procesor sadrži više spremnika u
koje se privremeno pohranjuju operandi i rezultati operacija. Sve aritmetičke i logičke
operacije izvode se samo nad sadržajima spremnika te se rezultat operacije pohranjuje samo u
jedan od spremnika. Operandi se u spremnike donose pomoću load naredbe, a rezultati se
upisuju u memoriju pomoću store naredbe. Ovakav koncept procesora naziva se procesor sa
spremnicima opće namjene.
Procesor sa 32 spremnika opće namjene prikazan je sljedećom slikom:
MEMORIJA
0
4
PROCESOR
8
PC
12
IR
16
R0
R1
R2
R3
20
ALU
30
10
R31
0
100
103
104
107
108
111
112
115
x
y
z
rez
Slika 1.12 Procesor sa spremnicima opće namjene
Aritmetička naredba ovakvog procesora mora sadržavati informacije o operaciji te
spremnicima u kojima se nalaze operandi te spremniku u koji se pohranjuje rezultat. Kako je
spremnika u ovom primjeru svega 32 za njihovo adresiranje potrebno je 5 bita. Sukladno
navedenome format naredbe je:
Op. kod
5 bita
Adresa spremnika
Adresa spremnika
rezultata
operanda 1
5 bita
5 bita
20 bita
Adresa spremnika
operanda 2
5 bita
Ovakav koncept procesora ima još kraću naredbu koja u osnovi zauzima svega tri okteta.
Izvoñenje primjera kojim su opisani principi rada prethodna dva modela procesora na
procesoru sa spremnicima opće namjene prikazan je sljedećim slikama:
Slika 1.13 Izvoñenje programskog odsječka na procesoru sa spremnicima opće namjene.
Procjena vremena izvoñenje naredbe na procesoru sa spremnicima opće namjene prikazano je
u sljedećoj tablici:
trajanje
(takt)
faza
dohvat naredbe
izvoñenje naredbe
dohvat naredbe 3 okteta
inkrementiranje PC-a
dekodiranje
dohvat operanda
ALU operacija
UKUPNO
3
1
1
1
6
Ova analiza pokazuje da su ovakvi procesori približno duplo brži od procesora s
akumulatorom, dok je broj naredbi da se izvede proračun približno isti.
Temeljem provedenih razmatranja ovaj koncept procesora iskristalizirao se kao najbolje
rješenje koje će se daljnje razrañivati u ovom udžbeniku.
Ovdje je važno i potrebno još jednom napomenuti da su procjene broja taktova odnosno
vremena izvoñenja naredbi rañene temeljem pretpostavke da procesor dohvaća iz memorije
oktet po oktet (osam bitovna podatkovna sabirnica). Ukoliko procesor dohvaća više okteta u
jednom taktu ovi podaci će se promijeniti. Takoñer i vrijeme izvoñenja naredbe varira u
ovisnosti o realizaciji procesora što će biti naknadno obrañeno. Unatoč svemu navedenome
ove procjene su pomogle da se na odreñeni način kvantitativno usporede ponuñena rješenja.
1.4. Načini dohvata operanda – adresni modovi
U dosadašnjim razmatranjima obrada se radila samo s varijablama koje su odreñene adresom
memorijske lokacije na koju se sadržaj (vrijednost varijable) zapisuje. Programeri imaju
potrebu specificirati operande operacija i na drugačije načine.
Različiti načini pristupa operandima pokazani su na sljedećem primjeru programskog
odsječka u C-u:
#define
N 10
int
i, *pokazivac, podaci[N];
struct student
{
char ime[20], prezime[20];
int
godina;
} Ante;
….
pokazivac = podaci;
for (i = 0; i < N; i++)
podaci[i] = i+5;
….
Ovaj programski odsječak pokazuje da su operandi definirani kao konstante, varijable
pokazivači, polja, strukture. Postavlja se pitanje kako pristupati ovakvim podacima, odnosno
kako bi procesor trebao pristupati ovakvim podacima.
Razmotrimo primjer kada je jedan od operanada konstanta. Konstantu je moguće zapisati u
naredbi u polje predviñeno za adresu operanda ali sada se postavlja pitanje kako razlikovati da
se radi o konstanti a ne operandu.
Primjer:
int
x = 20, y = 30, rez;
rez = x + y + 104;
x ≡ adr 100, y ≡ adr 104, rez ≡ adr 108
Programski odsječak izvodi se na način:
rez = x + y
rez = rez + 104
Sukladno Tablica 1.1 u kojoj je dan primjer operacijskih kodova naredbe se kodiraju na način:
rez = x + y;
Op. kod +
0
Adr, rez. rez
108
Adr, op1. x
100
Adr, op2. y
104
rez = rez + 104;
Op. kod +
0
Adr, rez. rez
108
Adr, op1. rez
108
operand 2 104
104
Postavlja se pitanje kako razlikovati korištenje drugog operanda, odnosno u prvoj naredbi
vrijednost operanda se nalazi na adresi 104, a u drugoj je operand vrijednost 104 i zapisana je
direktno u naredbi. Ovo je moguće jedino ukoliko razlikujemo ova dva tipa zbrajanja. To
znači da će operacija u zavisnosti o kombinacije operanada imati različiti operacijski kod.
Naredba
0p1
zbrajanje
oduzimanje
množenje
dijeljenje
ostatak dijeljenja
I nad bitovima
ILI nad bitovima
EXOR nad bitovima
NE nad bitovima
…..
zbrajanje
oduzimanje
množenje
dijeljenje
…..
op2
var
var
var
var
var
var
var
var
var
var
var
var
var
var
var
var
var
var
var
var
var
var
konst
konst
konst
konst
Operacijski Operacijski
kod
kod binarno
0
0000 0000
1
0000 0001
2
0000 0010
3
0000 0011
4
0000 0100
5
0000 0101
6
0000 0110
7
0000 0111
8
0000 1000
16
17
18
19
0001 0000
0001 0001
0001 0010
0001 0011
Nakon ovakvog odabira operacijskih kodova naredbe se prikazuju na sljedeći način
rez = x + y;
Op. kod +
0
Adr, rez. rez
108
Adr, op1. x
100
Adr, op2. y
104
rez = rez + 104;
Op. kod +
16
Adr, rez. rez
108
Adr, op1. rez
108
operand 2 104
104
Slika 1.14 Operand (varijabla) specificiran preko memorijske adrese.
Slika 1.15 Operand (konstanta) specificiran u okviru .naredbe
Za primijetiti je da ovakvim rješenjem dohvat konstante brži od dohvata varijable koja
zahtjeva dodatne pristupe memoriji.
Slična razmatranja mogu se provesti i za pokazivače. Pokazivač je varijabla čiji sadržaj je
adresa na kojoj se nalazi operand.
Na sljedećoj slici prikazan je dohvat operanda prikazanog kao pokazivač.
Slika 1.16 Operand (pokazivač) specificiran u okviru .naredbe.
Za razliku od konstante, pokazivač može biti ili samo prvi operand, ili samo drugi operand, ili
oba operanda, rezultat, odnosno bilo koja kombinacija operanada i rezultata.
Polja i strukture zapisuju se u memoriju početno od neke bazne adrese pa nadalje element po
element. Na sljedećoj slici prikazan je zapis polja u memoriji kao i način pristupa
pojedinačnom članu polja.
MEMORIJA
0
1
pomak
baza = 100
+
indeks x veličina
elementa
100 = podaci
10
20
5
7
-10
35
35
podaci[0]
podaci[1]
108
podaci[2]
112
podaci[3]
116
podaci[4]
104
132
136
podaci[8]
podaci[9]
N-1
Slika 1.17 Način zapisa polja u memoriji kao i pristup članu polja
Za pristup članovima polja, a slično vrijedi za strukturu dobro je uvesti zasebni spremnik u
koji će se zapisati baza, a pomak može biti konstanta koja se zapiše u okviru naredbe.
MEMORIJA
0
1
PROCESOR
Op.
code
rez
...
...
op1
...
100 = podaci
op2
16
pomak
+
baza
adresa 116
10
20
5
7
-10
100
35
35
podaci[0]
podaci[1]
108
podaci[2]
112
podaci[3]
116
podaci[4]
104
132
136
podaci[8]
podaci[9]
N-1
Slika 1.18 Način pristupa operandu preko baze i pomaka
Način pristupa operandu, odnosno pohrane rezultata, naziva se adresni mod. Različiti adresni
modovi prikazani su i objašnjeni na sljedećim slikama.
Adresiranje u kojem je operand sastavni dio naredbe, slučaj kada se radi o konstanti, naziva se
neposredno adresiranje (immediate addressing) i prikazano je sljedećom slikom
Slika 1.19
Operand kao konstanta koja je sastavni dio naredbe neposredno adresiranje
(immediate addressing)
Neposrednim adresiranjem može se specificirati samo operand.
Pristup operandima, ali i rezultatu preko memorijske adrese (varijablama) naziva se direktno
adresiranje (direct addressing) i prikazano je sljedećom slikom.
Slika 1.20
Operandu ili rezultatu se pristupa preko adrese(varijabla) direktno adresiranje
(direct addressing)
Indirektan pristup operandu ili rezultatu bilo posredno preko memorijske adrese ili spremnika
(pokazivač) naziva se indirektno adresiranje (indirect addressing).
Slika 1.21
Operandu ili rezultatu se pristupa indirektno pomkoću memorijske
lokacije(pokazivač) indirektno adresiranje (indirect addressing)
Slika 1.22
Operandu ili rezultatu se pristupa indirektno pomoću spremnika (pokazivač)
indirektno adresiranje pomoću spremnika (indirect register addressing)
Pristup operandima ili rezultatu računajući adresu kao baza + pomak, Slika 1.18, naziva se
bazno adresiranje (base addressing). Koristi se za pristup složenim tipova podataka.
Nakon svih ovih razmatranja za uočiti je da za svaku operaciju su moguće brojne kombinacije
pristupa operandima i rezultatu (adresnih modova) što može rezultirati velikim brojem
operacija. Temeljem navedenoga prisutna su dva različita koncepta računala.
Prvi koncept je podržati što veći broj adresnih modova što rezultira velikom brojem naredbi.
Ovakav koncept naziva se računalo s složenim skupom naredbi (Complex Instruction Set
Computer) skr. CISC.
Suprotan koncept je podržati samo ograničeni broj adresnih modova što rezultira malim
brojem naredbi. Ovakav koncept naziva se računalo s malim skupom naredbi (Reduced
Instruction Set Computer) skr. RISC.