ISA et assembleur

Dans la convention d'appel RISC-V, que signifie le fait que s0 à s11 soient des registres « sauvegardés par l'appelé » (callee-saved) ?

  1. ASi la fonction appelée les utilise, elle doit sauvegarder leur valeur d'origine et la restaurer avant de revenir
  2. BLa fonction appelante doit toutes les mettre à 0 avant l'appel
  3. CCe sont des registres réservés à l'OS, inutilisables par les programmes utilisateur
Afficher la réponse et l'explication

Réponse : A. Si la fonction appelée les utilise, elle doit sauvegarder leur valeur d'origine et la restaurer avant de revenir

Les registres sauvegardés par l'appelé ont la garantie de conserver leur valeur à travers un appel de fonction. Si la fonction appelée veut utiliser s0 notamment, elle le sauvegarde d'abord sur la pile et le restaure avant de revenir. L'appelant peut placer dans les registres s les valeurs qu'il veut conserver après l'appel, sans avoir à les sauvegarder lui-même. Les variables de boucle y sont souvent placées.

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

Autres questions sur ISA et assembleur

  1. 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 ?
  2. 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 ?
  3. Quel est l'objectif de l'exécution de « addi sp, sp, -16 » au début d'une fonction RISC-V ?
  4. 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 ?
  5. Le code ci-dessus est le début (prologue) d'une fonction. Que fait cette partie ?