<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Sprungtabelle</id>
	<title>Sprungtabelle - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Sprungtabelle"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Sprungtabelle&amp;action=history"/>
	<updated>2026-06-01T02:14:44Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Sprungtabelle&amp;diff=700807&amp;oldid=prev</id>
		<title>109.40.65.189: /* Einsatzzwecke */Tippfehler korrigiert</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Sprungtabelle&amp;diff=700807&amp;oldid=prev"/>
		<updated>2020-10-21T23:36:48Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Einsatzzwecke: &lt;/span&gt;Tippfehler korrigiert&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Eine &amp;#039;&amp;#039;&amp;#039;Sprungtabelle&amp;#039;&amp;#039;&amp;#039; (auch &amp;#039;&amp;#039;&amp;#039;Verzweigungstabelle&amp;#039;&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;&amp;#039;Sprungleiste&amp;#039;&amp;#039;&amp;#039; genannt; englisch &amp;#039;&amp;#039;&amp;#039;&amp;lt;span dir=&amp;quot;ltr&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;jump table&amp;lt;/span&amp;gt;&amp;#039;&amp;#039;&amp;#039;) ist in der [[Programmierung]] eine Methode, bei der eine [[Bedingte Anweisung und Verzweigung|Verzweigung]] des Programmflusses durch eine Tabelle von [[Sprunganweisung]]en realisiert wird.&lt;br /&gt;
&lt;br /&gt;
== Einsatzzwecke ==&lt;br /&gt;
&lt;br /&gt;
=== Nutzung für Funktionsaufrufe ===&lt;br /&gt;
&lt;br /&gt;
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 [[Festwertspeicher|ROM]] oder innerhalb der Funktionsbibliothek, wo der eigentliche Programmcode steht. Auf diese Weise werden mehrere Zwecke gleichzeitig erfüllt:&lt;br /&gt;
*Man erreicht dadurch Kompatibilität zwischen aufeinanderfolgenden Softwareversionen: Auch wenn sich der eigentliche Code einer oder mehrerer Funktionen verändert und sich die Adresslage der Funktionseinsprünge dadurch ändert, wird nur die Adresse in den Sprungbefehlen der Sprungtabelle geändert, wogegen die Anwendungssoftware, die diese Sprungtabelle benutzt, eben nicht angepasst werden muss.&lt;br /&gt;
*Man kann diese Funktionen praktisch über eine &amp;#039;&amp;#039;Nummer&amp;#039;&amp;#039; (ihren Index innerhalb der Tabelle) ansprechen, was die Programmierung in bestimmten Bereichen vereinfacht.&lt;br /&gt;
&lt;br /&gt;
Manche [[Mikroprozessor]]en unterstützen solche Konstrukte auch durch spezielle Befehle, die solche indizierten Sprünge implementieren.&lt;br /&gt;
&lt;br /&gt;
== Switch-Anweisung ==&lt;br /&gt;
&lt;br /&gt;
Sprungtabellen können auch durch [[Compiler]] erzeugt werden, hauptsächlich bei der optimierten Implementierung von [[Switch-Anweisung]]en, bei denen die Werte eng zusammen liegen.&lt;br /&gt;
&lt;br /&gt;
== Implementierung ==&lt;br /&gt;
Implementierungsprinzip einer Programmbibliothek in [[MOS Technology 6502|6502]]-[[Assemblersprache|Assembler]]-Syntax:&lt;br /&gt;
&lt;br /&gt;
 Bibliotheksbasis:&lt;br /&gt;
   JMP Funktion&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;0&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;  ; Sprungleiste&lt;br /&gt;
   JMP Funktion&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;1&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;  ; Jede dieser Sprunganweisungen&lt;br /&gt;
   JMP Funktion&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;2&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;  ; belegt genau 3 Bytes im ROM&lt;br /&gt;
   ...&lt;br /&gt;
   JMP Funktion&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
   ...&lt;br /&gt;
 Funktion&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;0&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;:       ; Implementierung Funktion 0&lt;br /&gt;
   ...&lt;br /&gt;
   RTS             ; Rücksprung aus Funktionsroutine&lt;br /&gt;
 Funktion&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;1&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;:       ; Implementierung Funktion 1&lt;br /&gt;
   ...&lt;br /&gt;
   RTS             ; Rücksprung aus Funktionsroutine&lt;br /&gt;
   ...&lt;br /&gt;
 Funktion&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;:       ; Implementierung Funktion n&lt;br /&gt;
   ...&lt;br /&gt;
   RTS             ; Rücksprung aus Funktionsroutine&lt;br /&gt;
&lt;br /&gt;
Aufruf einer Funktion &amp;#039;&amp;#039;n&amp;#039;&amp;#039; aus so einer Bibliothek über ihre Nummer:&lt;br /&gt;
&lt;br /&gt;
   JSR Bibliotheksbasis+3*&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Bei einem [[Motorola-68000er-Familie|68k]]-Prozessor belegt ein Sprungbefehl 6 statt 3 Bytes, entsprechend muss im Aufruf dann mit 6 multipliziert werden.&lt;br /&gt;
&lt;br /&gt;
Auf Hochsprachenebene erledigt die jeweilige [[Laufzeitbibliothek]] die Umrechnung eines Funktionsnamens oder einer -nummer in so einen Sprungbefehl.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
[[Datei:Cbm kernal jmp table3.jpeg|mini|Sprungtabelle des CBM-Kernals]]&lt;br /&gt;
*Das [[Commodore BASIC|Betriebssystem]] des [[Commodore International|Commodore]]-[[PET 2001]] und seiner Nachfolger bis hin zum [[C64]] hatte am Ende seines ROMs so eine Sprungtabelle für die wichtigsten Betriebssystemaufrufe. Beispielsweise stand in allen genannten Betriebssystemen auf Adresse &amp;lt;code&amp;gt;$FFD2&amp;lt;/code&amp;gt; ein Sprung in die Routine zur Ausgabe eines einzelnen Zeichens (das im [[Akkumulator (Computer)|Akkumulator]] zu übergeben war) auf den Bildschirm.&lt;br /&gt;
*Die Shared Libraries (Funktionsbibliotheken) des [[Amiga]]OS verfügen alle an ihrem Anfang über so eine Sprungtabelle, über die standardmäßig alle Aufrufe ihrer Funktionen erfolgen.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Programmiersprachelement]]&lt;/div&gt;</summary>
		<author><name>109.40.65.189</name></author>
	</entry>
</feed>