j
Pseudoelementlyszt.net behandelt j und andere RISC-V-Befehle ausführlicher.
Beschreibung
j führt den einfachsten Sprung aus: Es überträgt die Kontrolle immer an eine Marke, ohne dass eine Bedingung damit verbunden ist. Eine Verzweigungsanweisung überträgt die Kontrolle nur, wenn ein Vergleich erfolgreich ist. Die Syntax lautet j label.
Dies ist ein unbedingter Sprung, auch als goto bekannt. Schleifen und if/else-Blöcke verlassen sich darauf. Eine einfache Schleife setzt eine bedingte Verzweigung an den Anfang, um zu entscheiden, wann sie verlassen wird, führt den Schleifenkörper aus und endet mit einem j, das für den nächsten Durchlauf zum Anfang zurückkehrt. Ohne diesen Sprung läuft die Ausführung am Ende ab und die Schleife wiederholt sich nie. In einem if und else überspringt ein j am Ende des if-Blocks den else-Block, sodass nur einer der beiden Blöcke ausgeführt wird.
j zeichnet keine Rücksprungadresse auf, was es von einem Funktionsaufruf unterscheidet. Verwende j, um dich innerhalb deines Codes zu bewegen, sei es für Schleifen oder um einen Block zu überspringen, und verwende call, wenn die Ausführung zurückkehren muss. Der entscheidende Faktor ist, ob eine Rückkehr benötigt wird.
Das RISC-V-Handbuch kodiert einfache unbedingte Sprünge als jal mit rd auf x0 gesetzt. Es besagt, dass dieser Sprung immer für unbedingte Verzweigungen verwendet werden sollte, anstatt für eine bedingte Verzweigung, deren Bedingung immer wahr ist. Sprünge sind außerdem pc-relativ, decken einen viel größeren Bereich als Verzweigungen ab und lassen die Tabellen zur Vorhersage bedingter Verzweigungen unberührt.
j ist eine Pseudoanweisung für die folgende Zeile.
jal zero, label
Dies ist ein jump and link, der die Rücksprungadresse in das Register zero schreibt, das sie verwirft, sodass nur der Sprung übrig bleibt. Das Beispiel springt zurück zum Anfang einer Schleife.
Wird erweitert zu
jal zero, label
Der Assembler ersetzt diese Pseudoanweisung durch die oben aufgeführte(n) echte(n) Anweisung(en).
Beispiel
j loop # go back to the top of the loop
Referenzen
- [1]RISC-V International. The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture. Version 20260120. Section 2.5.1, Unconditional Jumps, page 30.
- [2]RISC-V International. The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture. Version 20260120. Section 2.5.2, Conditional Branches, pages 31 to 32.
