title: Spronginstructie
text: 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"). In COBOL en PL/1 als twee woorden: GO TO. In assembleertalen wordt vaak  B (van branch), J of JMP (van jump) gebruikt. In BASIC mag GOTO na THEN worden weggelaten.
  
  Spronginstructies in procedurele programmeertalen 
  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 een 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  ' of: IF A = 0 THEN 60
  40 PRINT "Fout, probeer opnieuw!"
  50 GOTO 20
  60 PRINT "Correct!"
  70 END
  
  In het bovenstaande voorbeeld wordt naar een regelnummer gesprongen, maar in de meeste talen kan daarvoor een label worden gebruikt. Een label bestaat meestal uit een naam, gevolg door een dubbele punt.
  
  In de jaren 70 kwam men tot het inzicht dat de spronginstructie een slechte invloed had op de leesbaarheid van het programma, waardoor het programma lastig te onderhouden was (zie Spaghetticode). Bovendien bleek dat de instructie overbodig was: elk probleem kon ook worden opgelost zonder GOTO te gebruiken. 
  In plaats daarvan gebruikte men de iteratie met statements als FOR, DO en WHILE.
  De oplossingen werden steeds meer gevonden in het gestructureerd programmeren. Iteraties en keuzestructuren met bijbehorende statements verdreven GOTO uit de gestructureerde programma's. In programmeercursussen werd GOTO niet onderwezen (hoewel de gebruikte taal het statement nog wel kende) en in de meeste nieuwe programmeertalen is het statement GOTO zelfs niet meer beschikbaar.
  
  Bekende tegenstander van het GOTO-statement en voorvechter van het gestructureerd programmeren was de Nederlandse informaticus Edsger Dijkstra.
  
  In assembleertalen wordt de spronginstructie nog steeds gebruikt, maar deze talen worden vrijwel alleen nog gebruikt voor kleine programmaatjes op een laag niveau van het besturingssysteem.
  
  Spronginstructies in assembler of machinetaal  
  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").
  
  Programmeerconcept