Instructieset en assembly

Als welke instructie wordt de RISC-V-pseudo-instructie „ret” in werkelijkheid uitgevoerd?

  1. Ajal ra, 0
  2. Bjalr x0, 0(ra)
  3. Clw ra, 0(sp)
Antwoord en toelichting tonen

Antwoord: B. jalr x0, 0(ra)

jalr (jump and link register) springt naar het adres dat ontstaat door een offset op te tellen bij een registerwaarde en plaatst het adres van de volgende instructie in de bestemming. ret is „jalr x0, 0(ra)”: het springt naar het adres in ra en gooit de link in x0 weg. jalr wordt ook gebruikt voor sprongen waarvan het doel pas tijdens uitvoering bekend is, zoals bij functiepointers en aanroepen van virtuele functies. „lw ra, …” om ra te herstellen is een voorbereiding vóór ret.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Instructieset en assembly

  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?