Instructieset en assembly

Wat betekent het dat s0 tot s11 in de RISC-V-aanroepconventie „callee-saved”-registers zijn?

  1. AAls de aangeroepen functie ze gebruikt, slaat die de oorspronkelijke waarde op en herstelt die vóór de terugkeer
  2. BDe aanroepende functie moet ze vóór de aanroep altijd allemaal op 0 zetten
  3. CHet zijn registers die alleen het OS kan gebruiken en die gebruikersprogramma's niet kunnen gebruiken
Antwoord en toelichting tonen

Antwoord: A. Als de aangeroepen functie ze gebruikt, slaat die de oorspronkelijke waarde op en herstelt die vóór de terugkeer

Bij callee-saved-registers is afgesproken dat de waarde behouden blijft over functie-aanroepen heen. Als de aangeroepen functie bijvoorbeeld s0 wil gebruiken, slaat die het eerst op de stack op en herstelt het vóór de terugkeer. De aanroeper hoeft zelf niets opnieuw op te slaan als hij waarden die hij na een aanroep nog wil gebruiken in s-registers houdt. Lusvariabelen en dergelijke worden vaak hier geplaatst.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Instructieset en assembly

  1. In de RISC-V-aanroepconventie zijn t0 tot t6 „caller-saved”-registers. Wat is de juiste handelwijze als een functie de waarde die hij in t0 heeft gezet ook na het aanroepen van een andere functie wil gebruiken?
  2. Bij functies die geen andere functies aanroepen (bladfuncties, leaf functions) hoeft ra vaak niet op de stack te worden opgeslagen. Wat is de juiste reden?
  3. Wat is het juiste doel van het uitvoeren van „addi sp, sp, -16” aan het begin van een RISC-V-functie?
  4. In de standaard RISC-V-aanroepconventie moet de stackpointer sp bij het betreden van een functie op een veelvoud van 16 bytes zijn uitgelijnd. Wat is de meest passende reden?
  5. De bovenstaande code is het begin (prologue) van een functie. Wat doet dit deel?