Wat is Aanroepconventie (calling convention)?

Afspraak over in welke registers of op welke stack argumenten en returnwaarden worden doorgegeven en wie welke registers bewaart bij een functieaanroep. Een belangrijk onderdeel van de ABI.

Japanse benaming: 呼び出し規約

“Aanroepconventie (calling convention)” komt voor in 9 oefenvragen uit 1 onderwerpen, bijv. Instructieset en assembly.

Vakgebied: Instructieset en assembly

Nu oefenen: vragen over Aanroepconventie (calling convention)

Wat is het belangrijkste doel van het vastleggen van een aanroepconventie (calling convention)?

  1. ADe naamgeving van functies uniform maken en het programma leesbaarder maken
  2. BErvoor zorgen dat afzonderlijk gecompileerde functies en bibliotheken argumenten en retourwaarden correct aan elkaar kunnen doorgeven
  3. CBij elke functie-aanroep toestemming van het OS vragen
Antwoord en toelichting tonen

Antwoord: B. Ervoor zorgen dat afzonderlijk gecompileerde functies en bibliotheken argumenten en retourwaarden correct aan elkaar kunnen doorgeven

Een aanroepconventie legt vast in welk register argumenten worden geplaatst, waar de retourwaarde wordt teruggegeven, welke registers de aangeroepen functie mag overschrijven en hoe de stack wordt gebruikt. Dankzij deze afspraak werken ook bibliotheken van verschillende compilers en functies in assembleertaal samen met C-functies correct. De aanroepconventie is een belangrijk onderdeel van de ABI (application binary interface).

Welke registers worden in de standaard RISC-V-aanroepconventie gebruikt om gehele-getalargumenten en retourwaarden door te geven?

  1. AArgumenten in s0 tot s7, retourwaarde in ra
  2. BArgumenten in a0 tot a7, retourwaarde in a0 (en a1)
  3. CAlle argumenten op de stack, retourwaarde in sp
Antwoord en toelichting tonen

Antwoord: B. Argumenten in a0 tot a7, retourwaarde in a0 (en a1)

In de standaard RISC-V-aanroepconventie worden maximaal 8 gehele-getalargumenten doorgegeven in a0 tot a7 (x10 tot x17), en de retourwaarde komt in a0, bij 64-bits waarden en dergelijke in a0 en a1. Omdat ze via registers, die sneller zijn dan geheugen, worden doorgegeven, is de overhead van een functie-aanroep klein. Argumenten boven de 8 komen op de stack. Kommagetalargumenten gebruiken fa0 tot fa7.

“Aanroepconventie (calling convention)” in de toelichting

Vragen met “Aanroepconventie (calling convention)” (9)

  1. Wat is het belangrijkste doel van het vastleggen van een aanroepconventie (calling convention)?
  2. Welke registers worden in de standaard RISC-V-aanroepconventie gebruikt om gehele-getalargumenten en retourwaarden door te geven?
  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. Wat betekent het dat s0 tot s11 in de RISC-V-aanroepconventie „callee-saved”-registers zijn?
  5. 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?
  6. 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?
  7. Welke algemene gehele-getalregisters heeft RISC-V RV32I (de basisinstructieset voor gehele getallen van 32 bits)?
  8. Welke werking van de RISC-V-instructie „jal ra, func” is juist?
  9. Welke omschrijving van de ABI (application binary interface) is juist?

Verwante termen

ABI (application binary interface) Via Stackpointer Numerieke apertuur (NA) Pseudo-instructie Instructiesetarchitectuur (ISA) Adresseringsmodus Assembler Bladfunctie (leaf function) Branch delay slot

Naar de woordenlijst