Kaj računalnik zna (računalniški strojni ukazi)

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 ukazi

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.



Tipi ukazov

Množica ukazov, ki je tipično na voljo, je naslednja:

Rokovanje s podatki oziroma s pomnilnikom:

Aritmetične in logične operacije

Ukazi za krmiljenje programskega poteka



Zgradba ukaza


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.


Vrste operandov (celo število, število v pomični vejici, bajt, bit)




Načini naslavljanja

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:

Takojšnji način (immediate mode)

Pri takšnem načinu je operand določen kar v samem ukazu. Tak ukaz vsebuje kar operand namesto naslova operanda.

Primer  takega ukaza:

ADD 7; 

Akumulatorju procesorja želimo prišteti vrednost 7.


Registrski način

Register Mode Addressing 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.


Indirektni registrski način

Register Indirect Mode Addressing 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.


Avto inkrement/dekrement

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.


Direkten način naslavljanja

Direct Addressing Mode 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.




Indirekten način naslavljanja

Indirect Addressing Mode 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.


Način naslavljanja z odmikom

Displacement Addressing Mode 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).



Relativni način naslavljanja

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)


Naslavljanje z osnovnim (base) registrom

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.


Naslavljanje s skladom

Rezultat iskanja slik za stack 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.



Bolj podrobno o izvajanju ukazov v računalniku


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 ukaza

Programski š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 ukaza

Ukaz, 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 ukaza

Krmilna 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.