lipseudo

li

pseudo
Assembleur RISC-V Référence

lyszt.net couvre li et d'autres instructions RISC-V plus en détail.

Description

li charge un nombre constant dans un registre. Le nom signifie load immediate (charger immédiatement), et un immédiat est une valeur fixe écrite directement dans le code. La ligne suivante stocke 42 dans t0.

li t0, 42

La plupart des programmes commencent par placer des nombres connus dans des registres, notamment des compteurs, des limites et des codes de service.

Le mot load vient d'une limite matérielle. Une instruction RISC-V fait 32 bits de long et doit porter ensemble l'opération, les registres et la constante. Une seule instruction ne peut pas contenir une constante complète de 32 bits. Les petites constantes tiennent et les grandes non.

li contourne cette limite. C'est une pseudo-instruction, un nom que l'assembleur remplace par les instructions réelles requises par la valeur. Une petite valeur nécessite une instruction. Une grande valeur en nécessite deux, l'une qui définit la partie supérieure et l'autre qui ajoute la partie inférieure, de sorte que la ligne suivante fonctionne pour un nombre de n'importe quelle taille.

li t1, 0x10010000

Le simulateur affiche les instructions réelles dans lesquelles li se développe.

Le manuel RISC-V décrit lui comme l'instruction permettant de construire des constantes de 32 bits. Elle place une valeur de 20 bits dans les bits supérieurs du registre de destination et remplit les 12 bits les plus bas avec des zéros.

li et la chargent des choses différentes. li charge un nombre que vous avez saisi et la charge l'adresse que représente une étiquette. L'exemple charge une petite valeur et une grande, et l'assembleur traite les deux de la même manière.

Se développe en

addi rd, zero, imm          # small constants
lui rd, hi  +  addi rd, rd, lo   # large constants

L'assembleur remplace cette pseudo-instruction par la ou les instructions réelles listées ci-dessus.

Exemple

li t0, 42
li t1, 0x10010000