Računalnik zna na najbolj osnovnem nivoju izvajati le osnovne
operacije (aritmetične, logične,
primerjalne, vhodne, izhodne,
operacije za delo s pomnilnikom). Množici ukazov, ki jih pozna, pravimo
strojni jezik računalnika.
Strojni jezik sestavljajo posamezni stavki oziroma navodila. Glede na določeno zgradbi računalnika lahko v teh stavkih navajamo:
S temi preprostimi instrukcijami, ki se izvajajo zaporedno, ali jih usmerjajo krmilni stavki, lahko sestavljamo bolj kompleksne operacije.
Množica ukazov, ki je tipično na voljo, je naslednja:
Spomnimo se, da je ukaz načeloma sestavljen iz dveh delov. Prvi vsebuje binarno kodo zahtevane operacije. Drugi del pa je namenjen operandu. Tu je lahko kar podatek ali pa informacija, kje podatek leži. Torej je tu navedena številka registra s podatkom ali pa naslov pomnilne lokacije s podatkom. Lahko pa imamo iskani podatek naslovljen tudi kako drugače. Načinov naslavljanja je več. Spoznali jih bomo v nadaljevanju. |
Polje z operacijsko kodo določa, katera operacija naj bo izvedena. Taka operacija je običajno izvedena s podatkom v nekem registru ali pomnilniški lokaciji. Kako izberemo nek operand, je odvisno od načina naslavljanja v ukazu. Način naslavljanja je kar precej odvisen od organizacije CPE.
V grobem imamo načine, kjer naslavljamo pomnilnik in načine, ki temeljijo predvsem na naslavljanju registrov. V splošnem imamo naslednje načine naslavljanja:
Primer takega ukaza:
ADD 7;
Akumulatorju procesorja želimo prišteti vrednost 7.
V tem
primeru je operand shranjen v nekem registru (recimo mu R), ki je
del centralne procesne enote. Nasloviti moramo torej ta register. Prednosti takega naslavljanja so v hitrejšem dostopu do podatka (operanda). Program poteka hitreje. Slabosti: Število takih (delovnih) registrov je majhno. program se nam zato lahko zakomplicira. |
V tem načinu ukaz podaja register, katerega vsebina je pravzaprav naslov operanda v glavnem pomnilniku. Register torej ne vsebuje samega operanda, pač pa naslov operanda. |
V tem primeru je vrednost registra avtomatsko povečana ali zmanjšana pred uporabo te vrednosti ali po njeni uporabi.
Tak način uporabe registra je še posebno smiseln pri delu s polji podatkov (tabelami), saj lahko vredb+nost registra predstavlja indeks v tako polje.
V tem načinu
je naslov operanda (naslov lokacije v glavnem pomnilniku) kar v
samem strojnem ukazu. Dostop do podatka je tako hiter, brez dodatnih preračunavanj naslova podatka. Primer: ADD R1, 4000 ; V tem priemru je 4000 že kar efektivni naslov operanda . Opomba: Efektivni naslov je naslov lokacije, kjer je shranjen operand. Slabost takega naslavljanja je, da je naslovni prostor omejen s številom bitov, ki so v ukazu namenjeni takim naslovom. |
V tem primeru naslovno polje ukaza podaja naslov v glavnem pomnilniku, v katerem ni vrednost operanda, pač pa dejanski (efektivni) naslov v glavnem pomnilniku, kjer se vrednost operanda dejansko nahaja. To seveda izvedbo ukaza malo upočasni, daje pa druge prednosti. |
V tem
primeru se naslovni del ukaza prišteje vsebini nekega (indeksnega)
registra. Šele tako dobimo dejanski (efektivni) naslov, kje v
glavnem pomnilniku leži naš operand.
EA = A + (R), V tem primeru je naslovno polje ukaza razdeljeno: Del kaže na izbrani indeksni register, drug del pa osnovo, kateri prištevamo indeks (ali obratno). |
To je različica naslavljanja s pomočjo odmika. V tem primeru seštejemo vsebino programskega števca (PC) in naslovni del ukaza in tako dobimo lokacijo vpomnilniku, kjer je naš operand.
EA = A + (PC), pri tem je EA idejanski naslov in PC ije programski števec.
Operand is je oddaljen A celic od trenutne celice (ki jo kaže PC)
Tudi to je različica naslavljanja s pomočjo odmika. Efektivni naslov podatka dobimo tako:
EA = A + (R), Pri tem je Aodmik in register R vsebuje kazalec na osnovni (bazni) naslov.
Za
razumevanje tega bi morali vedeti, kaj je to sklad in kako deluje.
Sklad je podatkovna struktura, pri kateri podathe odlagamo vedno na
vrh (operacija PUSH) in jih vedno jemljemo z vrha (operacija POP).
Podobno, kot to delamo s skladiom krožnikov :) ) Pri tem načinu je operand na vrhu sklada. Tako bi na primer deloval ukaz ADD, ki bi pobral dva operanda z vrha sklada (POP), ki bi se zato za dva podatka znižal, in nato rezultat potisnil (PUSH) na vrh sklada. |
Osnoven proces računalnikovega delovanja predstavlja cikel ukaza,
ki je sestavljen najmanj iz treh faz: branje ukaza - dekodiranje
ukaza- izvedba ukaza ( fetch-decode-execute). Ta
proces se stalno ponavlja od zagona računalnika do njegovega
izklopa.
Sledi opis teh faz ukaznega cikla: 1. Branje ukazaProgramski števec (PC) vsebuje naslov naslednjega ukaza v glavnem pomnilniku. Ukaz računalnik prebere na naslovljeni lokaciji in shrani kopijo ukaza v ukazni register (instruction register, IR) v centralni procesni enoti. Po zaključku faze brenja se vrednost PC poveča za 1 in ta sedaj kaže na naslednji ukaz. 2. Dekodiranje ukazaUkaz, pomnjen v ukaznem registru, obdela dekoder. 3. Branje efektivnega naslovaČe ukaz vsebuje indirektni naslov. prebere procesor efektivni (dejanski) naslov operanda iz glavnega pomnilnika.Sicer pa se operand prebere direktno. 4. Izvedba ukazaKrmilna enota tvori ustrezne krmilne signale in jih pošlje aritmetično logični enoti. Rezultat operacije je nato shranjen v glavni pomnilnik ali posredovan ustrezni izhodni enoti računalnika device. |
Po izvedbi ukaza se celoten postopek ponovi, pri čemer naslednji cikel navodil običajno pridobi ukaz za naslednji korak zaradi povečane vrednosti v programskem števcu. Če pa je bil izveden ukaz za skok, bo programski števec spremenjen tako, da bo vseboval naslov naslednjega ukaza. V kompleksnejših CPE-jih je mogoče vzeti več ukazov, jih dekodirati in izvesti hkrati.
Ta potek
programa običajno motijo prekinitveni zahtevki iz vhodno
izhodnih enot. Programski števec je namreč le eden in lahko
"servisira" le en program naenkrat. Program se začasno prekine,
izvede se zahtevani servis periferne naprave. Nato se program
normalno nadaljuje. Stvar spominja na to, kot da bi učitelja stalno prekinjal s svojimi vprašanji preveč radovedni učenec. Je pa ta koncept prekinitev bistven za delo sodobnih računalnikov, ki navidezno opravljajo več nalog istočasno. |