Instructieset en assembly

Wat is het juiste doel van het uitvoeren van „addi sp, sp, -16” aan het begin van een RISC-V-functie?

  1. ADe stack naar lagere adressen laten groeien en een werkgebied van 16 bytes reserveren
  2. B16 bytes op de stack vrijgeven
  3. C16 aftrekken van de waarde in sp en dat als retourwaarde teruggeven
Antwoord en toelichting tonen

Antwoord: A. De stack naar lagere adressen laten groeien en een werkgebied van 16 bytes reserveren

Volgens de conventie van veel ISA's, waaronder RISC-V, groeit de stack van hoge naar lage adressen. Als sp met 16 wordt verlaagd, vormen de 16 bytes van de nieuwe sp tot de oude sp het stackframe van deze functie, waarin het terugkeeradres, opgeslagen registers en lokale variabelen kunnen staan. Aan het eind van de functie wordt met „addi sp, sp, 16” sp teruggezet, waardoor het gebied wordt vrijgegeven en de toestand gelijk is aan die vóór de aanroep.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Instructieset en assembly

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