Pogled programerja na zgradbo računalnika

Kaj se bomo v tem poglavju naučili?

Ne glede na to, v kakšnem programskem jeziku programiramo oziroma s kakšnimi orodji so sestavili nek računalniški program, lahko ta deluje le, če ga računalnik razume.  Spoznali naj bi, kako deluje računalnik na takoimenovanem strojnem nivoju. Za razumevanje tega pa moramo nujno poznati glavne dele računalnika in njihov pomen. Govorimo o »programerjevem pogledu na računalnik«.

Za začetek, nekaj o dvojiškem zapisu

Programer, ki se pri svojem delu spusti  na nivo zbirnega ali celo strojnega jezika, mora seveda razumeti, da digitalni računalniki temeljijo na uporabi ukazov in podatkov v dvojiškem sistemu, saj so osnovni gradniki, registri in pomnilne celice, pač sestavljeni iz skupin bitov.  Tudi pretvorba iz dvojiškega v kakšen bolj razumljiv številski sistem naj mu ne bi bila neznana, čeprav si tudi pri tem pomaga z računalnikom.

Poglejmo, kako lahko neko dvojiško vrednost pretvorimo v desetiško:

 

Glavni deli računalnika

Glavni deli računalnika so centralna procesna enota (procesor ali krajše CPE), pomnilnik ter različne periferne naprave.
Pomnilnik predstavlja skupina naslovljivih pomnilnih lokacij. Na posameznem (celoštevilčnem) naslovu imamo pri najbolj enostavnih računalnikih 1 byte (zlog 8 bitov), pri sodobnih računalnikih pa so tako naslovljivi zlogi tudi bistveno daljši (32 bitov in celo 64 bitov).  Kot bomo spoznali kasneje, pomnimo v takem pomnilniku običajno na sledečih se naslovih tako podatke kot program (v strojnem jeziku), ki lahko te podatke uporablja.

 

Centralno procesno enoto sestavlja več 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. Vsaj eden od registrov mora biti  sposoben pomnenja aritmetičnih in logičnih operacij. Pogosto mu zato pravimo akumulator.

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 računalnik pripravljen na izvedbo naslednje operacije.

 

Resničen primer, procesorji družine Intel x86

Kakšen je pogled programerja (v zbirnem jeziku) na računalnik s procesorji Intel x86:

 

Programer vidi naslednje stanje
        EIP Programski števec
              (naslov naslednjega ukaza)
        Delovni registri CPE
               (za pogosto rabljene podatke)
        Pogojne kode (Statusni register)
         Pomnijo stanje predhodne aritmetične operacije
         Uporaba pri pogojnih programskih skokih

 

 

Intelovi 16 bitni procesorji družine x86 so imeli 6 splošnih delovnih registrov  (AX, BX, CX, DX, SI, DI), 2 registra za sklad (BP in SP), en 16-bitni statusni register (FLAGS), in 4 segmentne registre (CS, SS, DS, ES). S pojavom 32 bitnih procesorjev (začenši z Intel 386 so 16-bitne registre podaljšali na 32 bitov in jih zato preimenovali v (EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP, EFLAGS, EIP).  Podoben prehod so naredili pri uvedbi 64 bitnih procesorjev in uvedli nove, daljše 64 bitne registre z novimi imeni (RAX, RBX, RCX, RDX, RSI, RDI, RBP, RSP, RFLAGS, RIP). Tem pa so dodali še 8 splošnih 64-bitnih registrov (R8, R9, ..., R15).

Več kot ima CPE delovnih registrov in daljši kot so le-ti, bolj je zmogljiv. Vendar za razumevanje samega delovanja računalnika to ni toliko pomembno.

 

Didaktičen primer: poenostavljen procesor

V nadaljevanju bomo zato za ponazoritev delovanja računalnika pogosto uporabili poenostavljen model računalnika z enim samim akumulatorskim registrom in s poenostavljenim statusnim registrom (le 2 bita, ki povesta, ali je bil rezultat predhodnje operacije enak nič ali negativen.

Tudi pomnilnik bo imel le 20 lokacij.