Instructieset en assembly

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?

  1. ANiets doen, want de aangeroepen functie herstelt t0 altijd
  2. Bt0 kan door andere functies niet worden overschreven en kan dus gewoon worden gebruikt
  3. CDe waarde van t0 vóór de aanroep op bijvoorbeeld de stack bewaren en na de aanroep terugzetten
Antwoord en toelichting tonen

Antwoord: C. De waarde van t0 vóór de aanroep op bijvoorbeeld de stack bewaren en na de aanroep terugzetten

De t-registers mag de aangeroepen functie vrij gebruiken zonder ze op te slaan. Als de waarde dus ook na de aanroep nodig is, moet de aanroeper die zelf bewaren. Door de verantwoordelijkheid voor het opslaan per register tussen aanroeper en aangeroepene te verdelen, kunnen veel functies tijdelijke registers zonder opslagmoeite gebruiken en neemt het totale aantal keren opslaan en herstellen af.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Instructieset en assembly

  1. 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?
  2. Wat is het juiste doel van het uitvoeren van „addi sp, sp, -16” aan het begin van een RISC-V-functie?
  3. 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?
  4. De bovenstaande code is het begin (prologue) van een functie. Wat doet dit deel?
  5. Welk voordeel heeft het gebruik van de frame pointer (in RISC-V s0/fp) in een functie?