Kaj še računalnik zna? 

Kaj se bomo naučili v tem poglavju?

Spoznali bomo, kako računanik glede na vrednost obdelovanih podatkov spreminja potek programa. Spoznali bomo tudi pomemben mehanizem, ki omogoča pisanje bolj jasnih in krajših programov, to so podprogrami.

Zaporedje ukazov, vejitve programa

Spoznali smo, da zna računalnik prepisovati podatke, jih seštevati in opravljati druge aritmetične operacije, izvajati logične operacije. Vsebine registrov in pomnilniških lokacij zna povečevati in zmanjševati. Pri tem koraka po pomnilniku od programskega ukaza do ukaza.

Ko spoznavamo skrivnosti programiranja, hitro ugotovimo, da mora program glede na nek podatek spremeniti svoj potek. Na strojnem nivoju to pomeni, da programski števec, to je register, ki kaže na naslednji ukaz, v nekaterih primerih ne sme kar napredovati za eno mesto (na naslednji ukaz), temveč mora preskočiti nekaj ukazov, bodisi naprej ali nazaj. Vračanje nazaj (in ponovno korakanje naprej) lahko tudi pomeni, da se program vrti v zanki.

 

Primer programa, ki  nekaj računa in dela programske skoke.

Stop  start  CPE
Hitrejše izvajanje CPE

Naslednji ukaz
Programski števec  = 0


Skrij ali prikaži komentarje


Ukaz prikaži kot:
mnemonik, desetiško, dvojiško

V bistvu ni to nič posebnega. Če zna računalnik (CPE) spremeniti vsebino registrov, zakaj ne bi znal tudi spremeniti vsebino programskega števca (in s tem izbiro naslednjega ukaza). Poznamo več vrst programskih skokov:

 

·         Programski skoki : Dolgi (JMP), kratki (branch),

·         Pogojeni skoki (bne, beq, bz..)

·         Skok na podprogram (JSR) in povratek z njega (RET)

 

V oklepajih je navedenih nekaj tipičnih imen za take ukaze, Več o teh imenih, ko bomo obravnavali zbirni jezik.
Dolgi programski skoki so taki, da lahko od trenutnega ukaza "preskočimo" na ukaz kjerkoli v pomnilniku. To pomeni, da mora naš ukaz za skok nuditi dovolj bitov za kakršenkoli naslov. Zato so taki ukazi tipično dolgi več bajtov.

Kratki skoki povedo, da se premaknemo le v okolico trenutnega ukaza (toliko in toliko mest naprej ali nazaj. Za tak odmik pa zadošča precej manj bitov in je tak ukaz krajši.

Pogojeni skoki se zgode, če je rezultat predhodne (na primer aritmetične) operacije enak nič, različen od nič, pozitiven ipd. Če pogoj ni izpolnjen, do skoka ne pride in program mirno koraka naprej po ukazih. Spomnimo se, da CPE v posebnem (statusnem) registru pomni te podatke.

 

Primer programa, ki v zanki izračuna vsoto števil od 10 do 20.

Algoritem:
V začetku zbriše vsoto.
Nato v zanki povečuje števec od 10 do 20
Vsakokrat vrednost števca prišteje vsoti.
Na koncu prikaže vsoto na zaslonu simuliranega terminala.

Stop  start  CPE
Hitrejše izvajanje CPE

Naslednji ukaz
Programski števec  = 0


Skrij ali prikaži komentarje


Ukaz prikaži kot:
mnemonik, desetiško, dvojiško

Podprogrami

Posebna vrsta skoka je skok na podprogram. To pomeni, da trenutni program prekinemo, kličemo ukaze v podprogramu. Ko se ti zaključijo, nadaljujemo s prej prekinjenim programom. Tako akrobacijo je program sposoben narediti s pomočjo dveh ukazov: skok na podprogram ( (jump to subroutine, JSR) in povratek iz podprograma (RET, return). Računalnik si pri tem pomaga še s skladom, kamor shrani podatek, kje je sploh prišlo do skoka, da se zna prav vrniti.

 

Primer programa, ki  dvakrat kliče isti podprogram.


Stop  start  CPE
Hitrejše izvajanje CPE

Naslednji ukaz
Programski števec  = 0


Skrij ali prikaži komentarje


Ukaz prikaži kot:
mnemonik, desetiško, dvojiško