Befehlssatz und Assembler
Der obige Code ist der Anfang (Prolog) einer Funktion. Was geschieht in diesem Teil?
addi sp, sp, -16
sw ra, 12(sp)
sw s0, 8(sp)
- AEs wird Platz auf dem Stack reserviert und die Rücksprungadresse (ra) sowie das vom Aufgerufenen zu sichernde s0 gesichert
- BDie Funktionsargumente ra und s0 werden vom Stack gelesen
- CDer Stack wird freigegeben, um aus der Funktion zurückzukehren
Antwort und Erläuterung anzeigen
Antwort: A. Es wird Platz auf dem Stack reserviert und die Rücksprungadresse (ra) sowie das vom Aufgerufenen zu sichernde s0 gesichert
Zeile 1 verringert sp um 16 und reserviert den Stackframe, Zeile 2 schreibt die Rücksprungadresse ra und Zeile 3 das vom Aufgerufenen zu sichernde s0 in den Frame. Die Funktion ruft andere Funktionen auf und muss daher ra schützen, und da sie s0 verwendet, auch dessen ursprünglichen Wert. Im Epilog am Funktionsende wird in umgekehrter Reihenfolge zurückgekehrt: „lw s0, 8(sp)“, „lw ra, 12(sp)“, „addi sp, sp, 16“, „ret“.