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