Instructieset en assembly

Welk voordeel heeft het gebruik van de frame pointer (in RISC-V s0/fp) in een functie?

  1. AEr is geen extra register nodig, dus de prestaties verbeteren altijd
  2. BZelfs als sp halverwege de functie verandert, kunnen lokale variabelen en argumenten op een vaste afstand worden aangeduid en kan een debugger de reeks aanroepen gemakkelijk volgen
  3. CDe stackruimte wordt automatisch groter en loopt niet meer over
Antwoord en toelichting tonen

Antwoord: B. Zelfs als sp halverwege de functie verandert, kunnen lokale variabelen en argumenten op een vaste afstand worden aangeduid en kan een debugger de reeks aanroepen gemakkelijk volgen

De frame pointer is een register dat blijft wijzen naar de stackpositie op het moment dat de functie werd betreden. Ook als sp halverwege verandert, bijvoorbeeld bij arrays van variabele lengte, kunnen lokale variabelen worden aangeduid als „zoveel bytes vanaf fp”. Als in elk frame de vorige fp wordt bewaard, kan men door die te volgen de reeks aanroepen (backtrace) verkrijgen. Het neemt echter één register in beslag en wordt bij optimalisatie vaak weggelaten.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Instructieset en assembly

  1. Wat gebeurt er als men bij het schrijven van een recursieve functie die zichzelf aanroept in RISC-V vergeet ra op de stack op te slaan?
  2. Op een little-endian RISC-V is het register met 0x12345678 met „sw” naar adres 0x100 geschreven. Wat is de waarde als daarna met „lbu” het byte op adres 0x101 wordt gelezen?
  3. Wat kan er gebeuren als het adres van een lw-instructie die 4 bytes leest in RISC-V geen veelvoud van 4 is (niet uitgelijnd)?
  4. Met welke factor van de waarde van a0 is het resultaat t0 van de RISC-V-instructie „slli t0, a0, 3” te vergelijken (overloop buiten beschouwing gelaten)?
  5. a0 bevat het beginadres van een array a van het type int (4 bytes) en a1 bevat de index i. Wat leest de bovenstaande code in a2?