Spronginstructie

Uit Wikipedia, de vrije encyclopedie
Ga naar: navigatie, zoeken

Een spronginstructie is een instructie in een programmeertaal die de uitvoering van een computerprogramma op een ander punt voortzet. In veel programmeertalen wordt een dergelijke opdracht GOTO genoemd, van het Engelse go to ("ga naar").

Spronginstructies in procedurele programmeertalen[bewerken]

In de procedurele (3e generatie) programmeertalen die met name in de jaren 70 en 80 werden ingezet, gaf het statement GOTO de programmeur de mogelijkheid de besturing op elk gepast en ongepast ogenblik op een totaal andere plek in het programma voort te zetten.

Een voorbeeld in BASIC, een van de oudere programmeertalen:

10 PRINT "Hoeveel is 7 - 7?"
20 INPUT A
30 IF A = 0 THEN GOTO 60
40 PRINT "Fout, probeer opnieuw!"
50 GOTO 20
60 PRINT "Correct!"
70 END

Met name in COBOL, dat voor verreweg de meeste geautomatiseerde administratieve toepassingen werd gebruikt, was dit statement vaak een uitkomst wanneer complexe programma's werden geschreven en de programmeur geen vat kreeg op de totale programmastructuur. De zogenaamde spaghetticode vond hier zijn oorsprong, doelend op de sliertenbrij van opdrachten die langs en door elkaar heen liep.

Vaak werd het GOTO-statement gebruikt wanneer programmatuur moest worden aangepast door programmeurs die niet zelf de oorspronkelijke auteurs van de programma's waren. Voor het inbouwen van enkele voorwaardelijke opdrachten werd al snel naar het GOTO-statement gegrepen, zeker als de programmastructuur toch al niet te best zichtbaar was.

De leesbaarheid en daarmee het onderhoud van deze programma's kwam behoorlijk onder druk te staan. De oplossingen werden steeds meer gevonden in het gestructureerd programmeren. Iteraties en keuzestructuren met bijbehorende statements verdreven GOTO uit de gestructureerde programma's. In de meeste nieuwe programmeertalen is het statement GOTO verdwenen.

Bekende tegenstander van het GOTO-statement en voorvechter van het gestructureerd programmeren was de Nederlandse informaticus Edsger Dijkstra.[1]

Spronginstructies in assembler of machinetaal[bewerken]

De term spronginstructie verwijst in assembler of machinetaal naar een instructie die een geheugenadres als een argument accepteert en tijdens het uitvoeren het geheugenadres gebruikt om de juiste CPU-instructies te lokaliseren om uit te voeren. In assembler wordt dit argument gespecificeerd als een label dat een variabel woord kan zijn. In machinetaal wordt dit label vertaald door de assembler tot een geheugenpad (bijvoorbeeld 0xFF45B4D1). Dit is een simpel voorbeeld:

Begin: 
  mov %a1,0x61 
  add a1,a2 
  jmp Begin 

"Begin:" is een label. "Begin" verwijst naar het geheugenadres waar de volgende instructie ("mov a1, 0x61") zich bevindt. Op het moment van uitvoeren zal de CVE (centrale verwerkingseenheid, CPU) de waarde 0x61 verplaatsen naar a1 (wat een adresregister is), daarna zal de inhoud van a1 en a2 bij elkaar opgeteld worden, en bij de spronginstructie ("jmp Begin") zal de CVE terugspringen naar het geheugenadres "Begin" waar doorgegaan wordt met het uitvoeren van de daarop volgende instructie ("mov a1, 0x61").

Bronnen, noten en/of referenties
  1. Edsger W. Dijkstra, Go-to statement considered harmful, Communications of the ACM 11 (3): 147–148