ISA et assembleur

Quel est le fonctionnement correct de l'instruction RISC-V auipc (add upper immediate to PC) ?

  1. AEnregistrer la valeur du PC telle quelle en mémoire
  2. BAjouter à sa propre adresse (PC) l'immédiat de 20 bits décalé de 12 bits vers la gauche, et placer le résultat dans un registre
  3. CSauter inconditionnellement à l'adresse spécifiée par l'immédiat en réécrivant le PC
Afficher la réponse et l'explication

Réponse : B. Ajouter à sa propre adresse (PC) l'immédiat de 20 bits décalé de 12 bits vers la gauche, et placer le résultat dans un registre

auipc se contente de placer « PC + (immédiat << 12) » dans un registre. En ajoutant ensuite le déplacement de 12 bits de poids faible avec jalr ou lw, on peut désigner, par leur distance au PC, l'adresse de fonctions ou de données situées dans une plage d'environ ±2 GiB autour de la position courante. Cela permet, dans du code indépendant de la position qui fonctionne quel que soit l'endroit où il est chargé, d'appeler des fonctions lointaines ou de lire des variables globales.

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

Autres questions sur ISA et assembleur

  1. En RISC-V (RV32I), après exécution de « addi t0, zero, -1 », quelle valeur de 32 bits contient t0 ?
  2. Un octet en mémoire contient 0x80. Quelle combinaison correspond aux valeurs obtenues en chargeant cet octet dans un registre de 32 bits avec les instructions RISC-V lb et lbu ?
  3. Quelle est la différence correcte entre RISC-V et x86 concernant le mécanisme de branchement conditionnel ?
  4. Quel est le fonctionnement correct de l'instruction RISC-V « slt t0, a0, a1 » ?
  5. Une fois l'exécution du code RISC-V ci-dessus terminée, quelle est la valeur de t0 ?