Instructieset en assembly
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?
- AOmdat het OS niet opstart als de stackcapaciteit geen veelvoud van 16 bytes is
- BOmdat het functienummer in de onderste 4 bits van sp wordt vastgelegd
- 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.