Befehlssatz und Assembler

Was bedeutet es, dass s0 bis s11 in der RISC-V-Aufrufkonvention „vom Aufgerufenen gesichert“ (callee-saved) sind?

  1. AWenn die aufgerufene Funktion sie verwendet, muss sie die ursprünglichen Werte sichern und vor der Rückkehr wiederherstellen
  2. BDie aufrufende Funktion muss vor dem Aufruf alle auf 0 setzen
  3. CEs sind Register, die nur das Betriebssystem verwenden darf und Benutzerprogramme nicht
Antwort und Erläuterung anzeigen

Antwort: A. Wenn die aufgerufene Funktion sie verwendet, muss sie die ursprünglichen Werte sichern und vor der Rückkehr wiederherstellen

Bei vom Aufgerufenen gesicherten Registern ist zugesichert, dass ihr Wert über Funktionsaufrufe hinweg erhalten bleibt. Will die aufgerufene Funktion s0 o. Ä. nutzen, sichert sie es zuerst auf dem Stack und stellt es vor der Rückkehr wieder her. Werte, die die aufrufende Seite auch nach dem Aufruf weiterverwenden will, legt sie in s-Registern ab und muss sie nicht selbst erneut sichern. Schleifenvariablen liegen häufig dort.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Befehlssatz und Assembler

  1. 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?
  2. Bei Funktionen, die keine anderen Funktionen aufrufen (Blattfunktionen, Leaf-Funktionen), muss ra oft nicht auf dem Stack gesichert werden. Welche Begründung ist richtig?
  3. Welchen Zweck hat die Ausführung von „addi sp, sp, -16“ am Anfang einer RISC-V-Funktion?
  4. In der Standard-Aufrufkonvention von RISC-V muss der Stackpointer sp beim Betreten einer Funktion auf ein Vielfaches von 16 Byte ausgerichtet sein. Welche Begründung passt am besten?
  5. Der obige Code ist der Anfang (Prolog) einer Funktion. Was geschieht in diesem Teil?