Tot hiertoe liep het programma gelijk een recept in de keuken. Iedere stap werd één-voor-één uitgevoerd. Iets geavanceerdere software (met de nadruk op iets) breken met dit principe. Af en toe wordt er een sprong uitgevoerd. Dit is zelfs al het geval bij een simpele if-constructie.
if (a_certain_variable == 16) {
do_something();
} else {
do_something_else();
}
138: 01000293 addi t0,zero,16
13c: 00531463 bne t1,t0,144 <do_something_else>
/* this is do_something */
140: 00628333 add t1,t0,t1
00000144 <do_something_else>:
144: 006282b3 add t0,t0,t1
In dit voorbeeld wordt er een conditionele jump gedaan. Dit is een sprong in het recept, mits er aan een bepaalde voorwaarde al-dan-niet voldaan is. De voorwaarde in het voorbeeld is: is deze waarde gelijk aan 16.
Indien er aan de voorwaarde voldaan is, wordt er een bepaalde instructie (of reeks van instructies) uitgevoerd. Indien er niet aan de voorwaarde voldaan is, wordt een andere (set van) instructie(s) uitgevoerd. De pijlen in de tekening de volgorde van de instructies aan en illustreren hoe er een sprong gemaakt wordt.
In de tekening ontbreekt 1 sprong. Welke?
De processor die gemaakt wordt, moet dit soort jumps ook kunnen faciliteren. Dit wordt gedaan door de program counter niet, na elke instructie, te verhogen met 0x4; maar door (wanneer nodig) een andere offset op te tellen of zelfs een volledige load te doen van de 32 bits van de PC.