Wat is Stackpointer?

Register dat wijst naar het adres van de huidige top van de stack. In RISC-V is dit sp (x2). In veel ISA's groeit de stack naar lagere adressen.

Japanse benaming: スタックポインタ

“Stackpointer” komt voor in 5 oefenvragen uit 4 onderwerpen, bijv. Instructieset en assembly, CPU en architectuur, Linker, loader en uitvoerbare formaten.

Vakgebied: Instructieset en assembly

Nu oefenen: vragen over Stackpointer

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?

  1. AOmdat het OS niet opstart als de stackcapaciteit geen veelvoud van 16 bytes is
  2. BOmdat het functienummer in de onderste 4 bits van sp wordt vastgelegd
  3. COmdat ook grote data tot 16 bytes op de stack efficiënt kunnen worden gelezen en geschreven zonder een grens te overschrijden
Antwoord en toelichting tonen

Antwoord: C. Omdat ook grote data tot 16 bytes op de stack efficiënt kunnen worden gelezen en geschreven zonder een grens te overschrijden

Als data op een adres worden geplaatst dat een veelvoud van hun grootte is (uitlijning), kunnen ze in één keer worden gelezen en geschreven zonder een grens te overschrijden. Als sp altijd een veelvoud van 16 is, blijft de uitlijning behouden ook wanneer bijvoorbeeld een double van 8 bytes of een long double van 16 bytes op de stack wordt geplaatst. Daarom reserveert een functie de framegrootte in veelvouden van 16 en gebruikt „addi sp, sp, -16” zelfs als maar één register wordt opgeslagen.

“Stackpointer” in de toelichting

Vragen met “Stackpointer” (5)

  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. Welk geheugengebied wordt gewoonlijk gebruikt om bij het aanroepen van een subroutine (functie) tijdelijk onder meer het terugkeeradres op te slaan?
  3. Waar worden in de standaard RISC-V-aanroepconventie het 9e en 10e argument doorgegeven bij het aanroepen van een functie met 10 gehele-getalargumenten?
  4. Waar wordt tijdens uitvoering een in een C-functie gedeclareerde lokale variabele (automatische variabele) zonder static geplaatst?
  5. Wat moet bij een contextwisseling worden opgeslagen voor het proces waarvan wordt overgeschakeld?

Vergelijkingen met deze term

Verwante termen

Aanroepconventie (calling convention) Via Stackframe Paginatabel ABI (application binary interface) Adresseringsmodus Assembler Bladfunctie (leaf function) Branch delay slot Callee-saved register

Naar de woordenlijst