V CPE s von Neumannovo arhitekturo hranimo naslov naslednjega ukaza, ki se bo izvedel, v posebnem registru PC. Poleg tega lahko v ta register dejansko vpišemo poljubno vrednost, kar ima za posledico prekinitev običajnega zaporedja izvajanja ukazov in nadaljevanje na povsem drugem mestu – temu pravimo skok.
Skok izvedemo s pomočjo t.i. skočnih ukazov. Poznamo dva tipa skočnih ukazov: pogojne skoke (ang. conditional branch) in brezpogojne skoke (ang. uncoditional branch, jump). Brezpogojni skoki vedno spremenijo vrednost registra PC, pri pogojnih skokih pa se vrednost spremeni le, če je izpolnjen nek pogoj.
Prevajalniki in tolmači pogojne stavke in zanke, ki smo jih spoznali pri visokonivojskem jeziku Python, prevedejo v skočne ukaze v strojnem jeziku, ki jih nato CPE izvede.
Oglejmo si primer pogojnega skoka JZ (ang. Jump if Zero), ki bo, če bo vrednost v registru R1 enaka nič, v register PC zapisal naslov addr:
Nekatere CPE pri preverjanju, ali je pogoj izpolnjen, namesto vrednosti poljubnega registra uporabljajo t.i. statusne bite (ang. status flag bits). Ti so običajno del večjega registra, imenovanega statusni register, in se samodejno spreminjajo glede na ukaz in rezultat operacije. Če bi bil npr. rezultat operacije odštevanja 0, bi se pogojni bit, imenovan Z (ang. zero), v statusnem registru nastavil na 1, sicer bi bil 0. Če bi bil rezultat iste operacije negativen, bi se nastavil bit N (ang. negative). Kadar je rezultat aritmetične operacije prevelik, da bi ga bilo mogoče zapisati v register, se uporabljata še bit prenosa (ang. carry) in bit preliva (ang. overflow).
Predpostavimo, da imamo CPE, ki zna opraviti 16 različnih operacij in za shranjevanje operandov uporablja 8 registrov. V tem primeru operacijo zapišemo s štirimi biti (24 = 16), za naslov osmih registrov pa potrebujemo tri bite (23 = 8). Za bitni zapis ukaza za seštevanje, katerega format smo prikazali zgoraj. tako potrebujemo 13 bitov: štiri bite za operacijo, ter po tri bite za vsak register. Predpostavimo še, da smo operaciji seštej dodelili bitno kodo 0010. Ukaz
ADD R5, R0, R4bi tako bil z biti zapisan, kot prikazuje spodnja slika:
Vključeni smo bili v ekipo, ki načrtuje novo CPE, v katerem so vsi ukazi lahko dvobajtni in je operacijska koda 4-bitna ter ima 8 registrov. Naša naloga je določiti format ukaza LOAD
. Zapiši primer bitnega zapisa ukaza LOAD
.
Kako velik je lahko pomnilnik pri naši CPE glede na ukaz LOAD
?