Befehlssatz und Assembler
Was geschieht bei RISC-V, wenn in einer sich selbst aufrufenden rekursiven Funktion vergessen wird, ra auf dem Stack zu sichern?
- Ara wird beim inneren Aufruf überschrieben, und die äußere Funktion kann nicht mehr korrekt zum richtigen Aufrufer zurückkehren
- BDie CPU sichert ra automatisch, daher entsteht kein Problem
- CUnabhängig von der Rekursionstiefe verdoppelt sich das Rechenergebnis
Antwort und Erläuterung anzeigen
Antwort: A. ra wird beim inneren Aufruf überschrieben, und die äußere Funktion kann nicht mehr korrekt zum richtigen Aufrufer zurückkehren
Das jal des rekursiven Aufrufs überschreibt ra mit „dem Befehl nach dem Aufruf in der Funktion selbst“. Ohne Sicherung kehrt die äußere Funktion bei ret nicht zum ursprünglichen Aufrufer, sondern in sich selbst zurück, wiederholt dieselbe Stelle oder arbeitet fehlerhaft. Daher gilt als Regel, dass eine Funktion, die andere Funktionen aufruft, ra im Prolog auf dem Stack sichert und im Epilog wiederherstellt.