Sprungtabelle

Eine Sprungtabelle (auch Verzweigungstabelle oder Sprungleiste genannt; englisch jump table) ist in der Programmierung eine Methode, bei der eine Verzweigung des Programmflusses durch eine Tabelle von Sprunganweisungen realisiert wird.

Einsatzzwecke

Nutzung für Funktionsaufrufe

Eine Sprungtabelle kann genutzt werden, um eine bestimmte Auswahl von Funktionen (aus einem Betriebssystem oder aus einer Funktionsbibliothek) bequem und kompatibilitätssicher aufrufen zu können. Dazu sind die Aufrufe (oder manchmal auch nur die nackten Funktionsadressen) mit konstanter Länge hintereinander wie in einer Tabelle im Speicher angeordnet. Sie bestehen typischerweise aus einfachen Sprungbefehlen an die Stelle im ROM oder innerhalb der Funktionsbibliothek, wo der eigentliche Programmcode steht. Auf diese Weise werden mehrere Zwecke gleichzeitig erfüllt:

Manche Mikroprozessoren unterstützen solche Konstrukte auch durch spezielle Befehle, die solche indizierten Sprünge implementieren.

Switch-Anweisung

Sprungtabellen können auch durch Compiler erzeugt werden, hauptsächlich bei der optimierten Implementierung von Switch-Anweisungen, bei denen die Werte eng zusammen liegen.

Implementierung

Implementierungsprinzip einer Programmbibliothek in 6502-Assembler-Syntax:

Bibliotheksbasis:
  JMP Funktion0  ; Sprungleiste
  JMP Funktion1  ; Jede dieser Sprunganweisungen
  JMP Funktion2  ; belegt genau 3 Bytes im ROM
  ...
  JMP Funktionn
  ...
Funktion0:       ; Implementierung Funktion 0
  ...
  RTS             ; Rücksprung aus Funktionsroutine
Funktion1:       ; Implementierung Funktion 1
  ...
  RTS             ; Rücksprung aus Funktionsroutine
  ...
Funktionn:       ; Implementierung Funktion n
  ...
  RTS             ; Rücksprung aus Funktionsroutine

Aufruf einer Funktion n aus so einer Bibliothek über ihre Nummer:

  JSR Bibliotheksbasis+3*n

Bei einem 68k-Prozessor belegt ein Sprungbefehl 6 statt 3 Bytes, entsprechend muss im Aufruf dann mit 6 multipliziert werden.

Auf Hochsprachenebene erledigt die jeweilige Laufzeitbibliothek die Umrechnung eines Funktionsnamens oder einer -nummer in so einen Sprungbefehl.

Hier erkennt man auch den Vorteil der Methode: Wird bei einer Überarbeitung der Funktionsbibliothek beispielsweise die Implementierung der Funktion1 erweitert, so dass sie mehr Raum im ROM belegt, verschieben sich die Einsprungspunkte der höheren Funktionsnummern nach hinten. Die Sprungleiste ganz am Beginn ändert ihre Struktur aber nicht, so dass auch der Aufruf aus dem Anwendungsprogramm nicht geändert werden muss.

Beispiele

Sprungtabelle des CBM-Kernals