Skoki

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:

Za zvedave

Primer bitnega zapisa ukaza

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, R4 
bi tako bil z biti zapisan, kot prikazuje spodnja slika:

Vaja

Vaja