Jumps

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.