ISA et assembleur

Quel est l'objectif de l'exécution de « addi sp, sp, -16 » au début d'une fonction RISC-V ?

  1. AÉtendre la pile vers les adresses basses pour réserver une zone de travail de 16 octets
  2. BLibérer 16 octets sur la pile
  3. CSoustraire 16 de la valeur de sp et la renvoyer comme valeur de retour
Afficher la réponse et l'explication

Réponse : A. Étendre la pile vers les adresses basses pour réserver une zone de travail de 16 octets

Par convention dans de nombreuses ISA, dont RISC-V, la pile croît des adresses hautes vers les adresses basses. En diminuant sp de 16, les 16 octets entre le nouveau sp et l'ancien deviennent le cadre de pile de cette fonction, où l'on peut placer l'adresse de retour, les registres sauvegardés et les variables locales. En fin de fonction, « addi sp, sp, 16 » restaure sp, libère la zone et rétablit l'état d'avant l'appel.

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

Autres questions sur ISA et assembleur

  1. 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 ?
  2. Le code ci-dessus est le début (prologue) d'une fonction. Que fait cette partie ?
  3. Quel est l'avantage d'utiliser un pointeur de cadre (s0/fp en RISC-V) dans une fonction ?
  4. En RISC-V, que se passe-t-il si l'on oublie de sauvegarder ra sur la pile en écrivant une fonction récursive qui s'appelle elle-même ?
  5. Sur un RISC-V little-endian, un registre contenant 0x12345678 est écrit à l'adresse 0x100 avec « sw ». Si l'on lit ensuite avec « lbu » l'octet à l'adresse 0x101, quelle est sa valeur ?