ISA et assembleur

En quelle instruction la pseudo-instruction RISC-V « ret » est-elle réellement exécutée ?

  1. Ajal ra, 0
  2. Bjalr x0, 0(ra)
  3. Clw ra, 0(sp)
Afficher la réponse et l'explication

Réponse : B. jalr x0, 0(ra)

jalr (jump and link register) saute à l'adresse obtenue en ajoutant un déplacement à la valeur d'un registre et place l'adresse de l'instruction suivante dans la destination. ret correspond à « jalr x0, 0(ra) » : elle saute à l'adresse contenue dans ra et jette le lien dans x0. jalr sert aussi aux sauts dont la destination n'est connue qu'à l'exécution, comme les appels par pointeur de fonction ou les fonctions virtuelles. Le « lw ra, … » qui restaure ra est une préparation effectuée avant ret.

S'entraîner sur ce thème Retour au thème

Autres questions sur ISA et assembleur

  1. Quel est le principal objectif de la définition d'une convention d'appel (calling convention) ?
  2. Dans la convention d'appel standard de RISC-V, quels registres servent à transmettre les arguments entiers et la valeur de retour ?
  3. Dans la convention d'appel standard de RISC-V, lors de l'appel d'une fonction à 10 arguments entiers, où sont transmis les 9e et 10e arguments ?
  4. Dans la convention d'appel RISC-V, que signifie le fait que s0 à s11 soient des registres « sauvegardés par l'appelé » (callee-saved) ?
  5. Dans la convention d'appel RISC-V, t0 à t6 sont des registres « sauvegardés par l'appelant » (caller-saved). Si une fonction veut continuer à utiliser une valeur placée dans t0 après avoir appelé une autre fonction, quelle est la démarche correcte ?