Delovi procesora
Procesor se sastoji iz nekoliko delova, od kojih su osnovni:
- upravljačka jedinica (CU – Control Unit),
- aritmetičko-logička jedinica (ALU – Arithmetic Logic Unit) i
- registri.
Upravljačka jedinica je deo koji kontroliše rad računara. Ona vrši dekodiranje operacija u programu, upravlja izvršenjem programa, memorijom i ostalim delovima računarskog sistema. Sa razvojem računara ide se ka tome da procesor bude što više rasterećen ovih funkcija, pa tako posebni kontroleri povezani na matičnu ploču preuzimaju deo ovih poslova.
Aritmetičko-logička jedinica jeste deo procesora koji obavlja aritmetičke i logičke operacije nad celim brojevima i pojedinim bitovima. Kao dodatak, procesori danas poseduju i jedinicu za računanje sa brojevima u pokretnom zarezu.
Registri su posebne memorijske lokacije dostupne unutar samog procesora. U njima su smešteni podaci sa kojima procesor upravo radi.
Registri procesora
Kao što je već rečeno, registri su specijalne memorijske lokacije koje se nalaze unutar samog procesora. U njih se smeštaju podaci sa kojima procesor trenutno radi. Postoje registri opšte namene:
- registri podataka – u njih se smeštaju podaci iz memorije sa kojima procesor radi;
- adresni registri – u njih se smeštaju memorijske adrese, kako bi procesor mogao da pročita neki podatak iz memorije ili da ga upiše nazad u memoriju.
Osim opštih, postoje i registri specijalne namene od kojih su najvažniji:
- akumulator – ovo je registar u koji se smeštaju rezultati svih operacija;
- registar indikatora – svaki bit ovog registra predstavlja „zastavicu“ koja se „podiže“ ako se prilikom izvršavanja operacije desi neki događaj, npr. ako je došlo do prekoračenja pri izračunavanju (overflow flag) ili ako je rezultat operacije bio nula (zero flag) itd.
- brojač naredbi – registar koji sadrži adresu sledeće operacije programa.
Naredbe procesora
Osnovni skup naredbi je kod modernih procesora isti kao i kod starijih modela, i možemo videti da procesor u stvari može da uradi relativno malo toga:
- aritmetičke operacije sa celim brojevima (povećavanje i smanjivanje za jedan, sabiranje, oduzimanje, množenje, deljenje, upoređivanje);
- logičke operacije (logičko I, ILI, negacija...);
- prebacivanje podataka (iz memorije u registre procesora, vraćanje u memoriju, prebacivanje sa jedne na drugu memorijsku lokaciju, rad sa stekom);
- rad sa bitovima (pomeranje bitova, postavljanje i proveravanje vrednosti bita);
- operacije kontrole toka programa (uslovni i bezuslovni skok na neku novu naredbu);
- operacije za rad sa indikatorima (flags – zastavice);
- operacije ulaza i izlaza.
Procesori kakve imamo u računarima kod kuće ili na poslu uglavnom su bazirani na međusobno kompatibilnim Intel ili AMD procesorima, koji danas izvršavaju i mnoge druge instrukcije vezane za rad sa decimalnim brojevima, grafiku, multimediju i sl. (FPU, MMX, SSE setovi naredbi).
Primer naredbi procesora
Evo jednog malog primera asemblerskog programa za stari procesor Z80, koji na dobar način ilustruje kako u stvari procesor radi.
Pre izvršavanja programa, situacija u memoriji bi mogla da bude ovakva. Pretpostavićemo da se na memorijskoj lokaciji 10000 već nalazi broj 5 (npr. kao rezultat ranijeg izvršavanja programa).
10000 | 5 |
10001 | 0 |
... | 0 |
Kao što ćemo videti, na najnižem nivou, naredbe su jako proste:
- LD - upis podatka na neku lokaciju (memorija, registar...)
- INC - podatak sa neke lokacije se uvećava za 1
- ADD - sabiranje dva broja pri čemu se rezultat smešta u akumulator
LD HL, 10000 | U registar HL, koji je predviđen da drži memorijske adrese, ubacujemo adresu 10000 |
LD A, (HL) | U registar A (akumulator) kopiramo podatak koji se u memoriji nalazi na adresi koja je u HL-u - A sada sadrži broj 5 |
LD B, 15 | U registar B (opšte namene) ubacujemo podatak - broj 15 |
ADD A, B | Sabiramo podatak iz akumulatora i registra B - rezultat će biti smešten u akumulator - A sada sadrži broj 20 |
INC HL | Povećavamo sadržaj registra HL za 1 - sada HL sadrži adresu 10001 |
LD (HL), A | Na memorijsku lokaciju iz registra HL, smeštamo podatak iz akumulatora (broj 20) |
Posle izvršenog programa, na memorijskoj lokaciji 10001 nalazi se rezultat, odnosno broj 20. Ispis tog rezultata na ekranu je neka sasvim druga priča.
10000 | 5 |
10001 | 20 |
... | 0 |
Čak je i za najjednostavniju operaciju potrebno napisati ceo "programčić". Danas skoro niko ne programira na ovako niskom nivou. CISC procesori stalno povećavaju broj ovakvih naredbi koje sa godinama postaju sve moćnije. Sa druge strane, RISC procesori umeju da izvrše mnogo manje naredbi (ali to rade jako brzo).