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) ?
- AUtiliser addi une seule fois en écrivant directement l'immédiat de 32 bits
- BFixer les 20 bits de poids fort avec lui, puis ajouter les 12 bits de poids faible avec addi
- 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.