Befehlssatz und Assembler

Wo werden das 9. und 10. Argument übergeben, wenn in der Standard-Aufrufkonvention von RISC-V eine Funktion mit 10 Ganzzahlargumenten aufgerufen wird?

  1. AIn s0 und s1
  2. BIn t0 und t1
  3. CAuf dem Stack
Antwort und Erläuterung anzeigen

Antwort: C. Auf dem Stack

Da es nur 8 Argumentregister a0 bis a7 gibt, legt die aufrufende Seite das 9. und alle weiteren Argumente auf den Stack, und die aufgerufene Seite liest sie an festen Positionen relativ zum Stackpointer. Wegen der zusätzlichen Speicherzugriffe werden Funktionen mit sehr vielen Argumenten etwas langsamer. Häufig wird versucht, die Argumentzahl klein zu halten, etwa indem große Strukturen gesammelt über einen Zeiger auf die Struktur übergeben werden.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Befehlssatz und Assembler

  1. Was bedeutet es, dass s0 bis s11 in der RISC-V-Aufrufkonvention „vom Aufgerufenen gesichert“ (callee-saved) sind?
  2. 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?
  3. Bei Funktionen, die keine anderen Funktionen aufrufen (Blattfunktionen, Leaf-Funktionen), muss ra oft nicht auf dem Stack gesichert werden. Welche Begründung ist richtig?
  4. Welchen Zweck hat die Ausführung von „addi sp, sp, -16“ am Anfang einer RISC-V-Funktion?
  5. 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?