ISA et assembleur

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 ?

  1. ANe rien faire : la fonction appelée restaure toujours t0
  2. Bt0 ne pouvant être modifié par d'autres fonctions, on peut l'utiliser tel quel
  3. CSauvegarder la valeur de t0, sur la pile par exemple, avant l'appel, et la restaurer après
Afficher la réponse et l'explication

Réponse : C. Sauvegarder la valeur de t0, sur la pile par exemple, avant l'appel, et la restaurer après

Les registres t peuvent être utilisés librement par la fonction appelée sans sauvegarde. Si la valeur est nécessaire après l'appel, l'appelant doit donc la sauvegarder lui-même. Répartir, registre par registre, la responsabilité de la sauvegarde entre appelant et appelé permet à de nombreuses fonctions d'utiliser des registres temporaires sans coût de sauvegarde, et réduit globalement le nombre de sauvegardes et de restaurations.

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

Autres questions sur ISA et assembleur

  1. Dans une fonction qui n'appelle aucune autre fonction (fonction feuille), il n'est souvent pas nécessaire de sauvegarder ra sur la pile. Quelle en est la raison ?
  2. Quel est l'objectif de l'exécution de « addi sp, sp, -16 » au début d'une fonction RISC-V ?
  3. La convention d'appel standard de RISC-V exige que le pointeur de pile sp soit un multiple de 16 octets à l'entrée d'une fonction. Quelle en est la raison la plus pertinente ?
  4. Le code ci-dessus est le début (prologue) d'une fonction. Que fait cette partie ?
  5. Quel est l'avantage d'utiliser un pointeur de cadre (s0/fp en RISC-V) dans une fonction ?