Instructieset en assembly
De bovenstaande code is het begin (prologue) van een functie. Wat doet dit deel?
addi sp, sp, -16
sw ra, 12(sp)
sw s0, 8(sp)
- AHet reserveert ruimte op de stack en slaat het terugkeeradres (ra) en het callee-saved s0 op
- BHet leest de functieargumenten ra en s0 van de stack
- CHet geeft de stack vrij om uit de functie terug te keren
Antwoord en toelichting tonen
Antwoord: A. Het reserveert ruimte op de stack en slaat het terugkeeradres (ra) en het callee-saved s0 op
Regel 1 verlaagt sp met 16 om het stackframe te reserveren, regel 2 schrijft het terugkeeradres ra en regel 3 het callee-saved s0 in het frame. Deze functie roept andere functies aan en moet dus ra bewaren, en gebruikt s0 en moet dus de oorspronkelijke waarde beschermen. In de epiloog aan het eind van de functie wordt in omgekeerde volgorde teruggekeerd met „lw s0, 8(sp)”, „lw ra, 12(sp)”, „addi sp, sp, 16” en „ret”.