Kako deluje računalnik
To poglavje morda lažje razumemo ob eksperimentiranju
s simulatorjem računalnika.
Glavni deli računalnika so centralna procesna enota
(procesor ali krajše CPE), pomnilnik, periferne
naprave.
Pomnilnik predstavlja skupina naslovljivih pomnilnih lokacij. Na posameznem
(celoštevilčnem) naslovu imamo pri enostavnejših računalnikih 1 byte (zlog
8 bitov), pri boljših rašunalnikih pa so tako naslovljivi zlogi tudi bistveno
daljši.
Centralno procesno enoto sestavlja vec registrov
in Aritmetično-logična enota (ALE).
Nekateri registri imajo poseben pomen (programski števec, kazalec na sklad,
statusni register). Tudi drugi si niso povsem ekvivalentni. Računalnik
zna izvajati preproste operacije tako, da
-
Iz pomnilnika prebere (binarno kodrano) instrukcijo.
-
Aritmetično logična enota ugotovi iz kode, kaj naj naredi in kje dobi podatke
za zahtevano operacijo.
-
Po izvedbi zahtevane operacije je racunalnik pripravljen na izvedbo naslednje
operacije.
Program računalnika predstavlja pravzaprav
zaporedje instrukcij. Kode teh instrukcij
so shranjene v zaporednih lokacijah pomnilnika.
Eden od registrov računalnikove CPE (normalno mu pravimo programski
števec) ima nalogo, da "kaže" na instrukcijo, ki naj se izvede.
Program torej poteka tako, da programski števec "koraka" od inštrukcije
do inštrukcije.
In kakšne so (nekatere) osnovne inštrukcije vsakega računalnika:
-
Vpis dane vsebine v nek register (ali pomnilno lokacijo)
-
Prepis vsebine neke lokacije ali registra v nek drug register
-
Povečevanje ali zmanjševanje vsebin registrov (ki tako delujejo kot števci,
uporabljamo jih lahko za indekse v polja ipd.)
-
Izvedba aritmetičnih operacij med dvema registroma (seštevanje, odštevanje,
množenje, deljenje..)/
-
Izvedba logičnih operacij med dvema registroma (And, Or, Xor)
-
(Druge inštrukcije bomo spoznali kasneje)
-
S primernimi inštrukcijami lahko tudi spremenimo vrednost samega programskega
števca. To pa pomeni preskok na drug del programa. Tak skok je lahko pogojen
z rezultatom predhodne operacije (kar pomni statusni
register procesorja).
Kako CPE ugotovi, kakšno operacijo naj izvede in katere podatke naj
pri tem uporabi:
To razbere iz kode instrukcije. Ta je lahko dolga en pomnilniški zlog (byt
ali besedo), če pa je to premalo, jo lahko dopolnjuje še več naslednjih
zaporednih bytov v pomnilniku.
Format instrukcije
Instrukcija pomni:
-
Kodo operacije
-
Način naslavljanja morebitnega podatka
-
Naslov podatka (ali podatek kot tak)
Načini naslavljanja
So tudi kodirani. Tipično imamo naslednje možnosti
Registrsko naslavljanje (podatek je v
nekem registru)
Takojšnje naslavljanje (podatek je (podaljšan)
del inštrukcije)
Absolutno naslavljanje (v podaljsku inštrukcije
je naslov pomnilniške lokacije s podatkom)
Relativno naslavljanje (podatek je odmaknjen
za toliko in toliko mest od inštrukcije. Odmik pomnimo v "podaljšku" inštrukcije)
Indeksno naslavljanje (naslov podatka določa
vsebina nekega registra, kateri prištejemo odmik
Opomba 1:
Relativno naslavljanje je podobno indeksnemu. Razlika je le v tem, da
si pri indeksnem pomagamo s takoimenovanim indeksnim registrom, pri relativnem
pa se "naslonimo" na programski števec.
Opomba 2:
Možne so tudi različne kombinacije in dopolnitve. Včasih govorimo o
"indirektnem " naslavljanju. To lahko pomeni,
da vzamemo vsebino nekega registra in jo uporabimo kot naslov podatka v
pomnilniku. V nekaterih primerih lahko pred ali po naslavljanju registre
avtomatsko povečujemo ali pomanjšujemo (preincrement,
postdecrement,..). To je zelo uporabno za delo s polji. Tipičen
primer registra, ki tako deluje, je tudi "kazalec
na sklad " (stack pointer, SP).
Pregled inštrukcij (2. del)
-
Programski skoki : Dolgi (JMP), kratki (branch), pogojeni (bne, beq, bz..)
Skok na podprogram (JSR) in povratek z njega (RET)
-
Preprečevanje, omogočanje programskih prekinitev (EI.. enable Interrupt
; DI.. disable interrupt,..)
-
Vhodno - izhodne operacije preko (INP portnum, OUT portnum)
Povratek domov