ISA et assembleur

En RISC-V, quelle est la méthode courante pour charger dans un registre une constante de 32 bits qui ne tient pas dans un immédiat de 12 bits (par exemple 0x12345678) ?

  1. AUtiliser addi une seule fois en écrivant directement l'immédiat de 32 bits
  2. BFixer les 20 bits de poids fort avec lui, puis ajouter les 12 bits de poids faible avec addi
  3. CLes constantes étant inutilisables, il faut toujours les lire depuis une entrée
Afficher la réponse et l'explication

Réponse : B. Fixer les 20 bits de poids fort avec lui, puis ajouter les 12 bits de poids faible avec addi

lui (load upper immediate) place un immédiat de 20 bits dans les bits 31 à 12 du registre et met à 0 les 12 bits de poids faible. En ajoutant ensuite les 12 bits de poids faible avec addi, on obtient n'importe quelle constante de 32 bits. Si l'on écrit « li a0, 0x12345678 » en assembleur, l'assembleur l'expanse au besoin en ces deux instructions. Dans les ISA à longueur d'instruction fixe, il est courant de construire les grandes constantes en plusieurs parties.

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

Autres questions sur ISA et assembleur

  1. Pour construire la constante 0x12345FFF en RISC-V avec les deux instructions lui et addi, quelle combinaison est correcte ?
  2. Quel est le fonctionnement correct de l'instruction RISC-V auipc (add upper immediate to PC) ?
  3. En RISC-V (RV32I), après exécution de « addi t0, zero, -1 », quelle valeur de 32 bits contient t0 ?
  4. 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 ?
  5. Quelle est la différence correcte entre RISC-V et x86 concernant le mécanisme de branchement conditionnel ?