Qu'est-ce que Convention d'appel ?

Règles définissant, lors d'un appel de fonction, les registres ou la pile utilisés pour passer arguments et valeur de retour, et qui sauvegarde quels registres. Partie importante de l'ABI.

Nom japonais: 呼び出し規約

« Convention d'appel » apparaît dans 9 questions d'entraînement réparties sur 1 thèmes, dont ISA et assembleur.

Domaine: ISA et assembleur

S'entraîner : questions sur Convention d'appel

Quel est le principal objectif de la définition d'une convention d'appel (calling convention) ?

  1. AUniformiser le nommage des fonctions pour rendre les programmes plus lisibles
  2. BPermettre à des fonctions et bibliothèques compilées séparément de s'échanger correctement arguments et valeurs de retour
  3. CExiger l'autorisation de l'OS à chaque appel de fonction
Afficher la réponse et l'explication

Réponse : B. Permettre à des fonctions et bibliothèques compilées séparément de s'échanger correctement arguments et valeurs de retour

La convention d'appel définit dans quels registres placer les arguments, où renvoyer la valeur de retour, quels registres l'appelé peut écraser et comment utiliser la pile. Grâce à ce contrat, des bibliothèques produites par des compilateurs différents, ou des fonctions écrites en assembleur et en C, fonctionnent correctement ensemble. La convention d'appel est une partie importante de l'ABI (interface binaire d'application).

Dans la convention d'appel standard de RISC-V, quels registres servent à transmettre les arguments entiers et la valeur de retour ?

  1. AArguments dans s0 à s7, valeur de retour dans ra
  2. BArguments dans a0 à a7, valeur de retour dans a0 (et a1)
  3. CTous les arguments sur la pile, valeur de retour dans sp
Afficher la réponse et l'explication

Réponse : B. Arguments dans a0 à a7, valeur de retour dans a0 (et a1)

Dans la convention d'appel standard de RISC-V, jusqu'à 8 arguments entiers sont passés dans a0 à a7 (x10 à x17), et la valeur de retour est renvoyée dans a0, ou dans a0 et a1 pour une valeur de 64 bits par exemple. Le passage par registres, plus rapides que la mémoire, réduit le coût des appels de fonction. Les arguments au-delà de 8 sont placés sur la pile. Les arguments flottants utilisent fa0 à fa7.

« Convention d'appel » dans les explications

Questions mentionnant « Convention d'appel » (9)

  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 ?
  6. 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 ?
  7. Quels sont les registres entiers à usage général de RV32I (jeu d'instructions entières de base 32 bits) de RISC-V ?
  8. Quel est le fonctionnement correct de l'instruction RISC-V « jal ra, func » ?
  9. Quelle description de l'ABI (interface binaire d'application) est correcte ?

Termes associés

ABI (interface binaire d'application) Pointeur de pile Assembleur Registre sauvegardé par l'appelé (callee-saved) Registre sauvegardé par l'appelant (caller-saved) Adresse de retour Pseudo-instruction Architecture du jeu d'instructions (ISA) Adressage relatif au PC Architecture load-store

Retour au glossaire