Befehlssatz und Assembler

Als welcher Befehl wird der RISC-V-Pseudobefehl „ret“ tatsächlich ausgeführt?

  1. Ajal ra, 0
  2. Bjalr x0, 0(ra)
  3. Clw ra, 0(sp)
Antwort und Erläuterung anzeigen

Antwort: B. jalr x0, 0(ra)

jalr (jump and link register) springt zu der Adresse aus Registerwert plus Offset und legt die Adresse des nächsten Befehls im Zielregister ab. ret ist „jalr x0, 0(ra)“: Es springt zur Adresse in ra, der Link wird nach x0 verworfen. jalr dient auch für Sprünge, deren Ziel erst zur Laufzeit feststeht, etwa Aufrufe über Funktionszeiger oder virtuelle Funktionen. „lw ra, …“ zum Wiederherstellen von ra ist eine Vorbereitung vor ret.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Befehlssatz und Assembler

  1. Was ist der Hauptzweck der Festlegung einer Aufrufkonvention (Calling Convention)?
  2. Welche Register werden in der Standard-Aufrufkonvention von RISC-V zur Übergabe von Ganzzahlargumenten und Rückgabewerten verwendet?
  3. Wo werden das 9. und 10. Argument übergeben, wenn in der Standard-Aufrufkonvention von RISC-V eine Funktion mit 10 Ganzzahlargumenten aufgerufen wird?
  4. Was bedeutet es, dass s0 bis s11 in der RISC-V-Aufrufkonvention „vom Aufgerufenen gesichert“ (callee-saved) sind?
  5. In der RISC-V-Aufrufkonvention sind t0 bis t6 „vom Aufrufer gesichert“ (caller-saved). Welches Vorgehen ist richtig, wenn eine Funktion einen in t0 abgelegten Wert auch nach dem Aufruf einer anderen Funktion weiterverwenden will?