mvpseudo

mv

pseudo
Assembleur RISC-V Référence

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

Description

mv copie la valeur d'un registre dans un autre. Le nom est l'abréviation de move. Après la ligne ci-dessous, les deux registres contiennent la même valeur et la source, t0, est inchangée.

mv a0, t0

mv est une pseudo-instruction. L'assembleur réécrit ce nom lisible en une instruction réelle, montrée ci-dessous.

addi rd, rs, 0

Ajouter zéro à une valeur et la stocker ailleurs en fait une copie. RISC-V n'a pas d'instruction de déplacement dédiée et réutilise l'addition à la place.

Différents registres ont différents rôles, ce qui est la raison habituelle d'utiliser mv. Par convention, les calculs se font dans les registres temporaires (t0, t1 et ainsi de suite). Lorsqu'une fonction est appelée, ses arguments vont dans des registres spécifiques (a0, a1 et ainsi de suite), et les résultats reviennent dans a0. Un programme place donc un mv avant un appel, ce qui met une valeur calculée dans le registre que le code appelé lit, et un mv après un appel, ce qui sauvegarde un résultat retourné dans un endroit sûr.

mv a0, t0
call square
mv s0, a0

Placer les valeurs dans les bons registres au bon moment est une grande partie de l'assembleur, et mv s'en charge.

Le manuel RISC-V indique que addi avec la constante 0 implémente la pseudo-instruction d'assembleur mv.

Comme mv copie la valeur, modifier la destination plus tard laisse la source inchangée. Cela rend mv utile pour conserver une copie d'une valeur avant qu'une boucle ne modifie l'original. La trace du simulateur montre le addi qui s'exécute à la place de mv.

Se développe en

addi rd, rs, 0

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

Exemple

li t0, 42
mv t1, t0         # t1 = 42