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.
© Copyright 2025 Paperzz