mvPseudoelement

mv

Pseudoelement
RISC-V Assembler Referenz

lyszt.net behandelt mv und andere RISC-V-Befehle ausführlicher.

Beschreibung

mv kopiert den Wert eines Registers in ein anderes. Der Name ist die Kurzform von move. Nach der folgenden Zeile enthalten beide Register denselben Wert, und die Quelle t0 bleibt unverändert.

mv a0, t0

mv ist eine Pseudoinstruktion. Der Assembler schreibt diesen lesbaren Namen in eine echte Instruktion um, die unten gezeigt wird.

addi rd, rs, 0

Null zu einem Wert zu addieren und ihn woanders zu speichern, erzeugt eine Kopie. RISC-V hat keine dedizierte Move-Instruktion und verwendet stattdessen die Addition.

Verschiedene Register haben verschiedene Aufgaben, was der übliche Grund für die Verwendung von mv ist. Konventionell finden Berechnungen in den temporären Registern statt (t0, t1 und so weiter). Wenn eine Funktion aufgerufen wird, gehen ihre Argumente in bestimmte Register (a0, a1 und so weiter), und Ergebnisse kommen in a0 zurück. Ein Programm platziert daher ein mv vor einem Aufruf, das einen berechneten Wert in das Register legt, das der aufgerufene Code liest, und ein mv nach einem Aufruf, das ein zurückgegebenes Ergebnis an einem sicheren Ort speichert.

mv a0, t0
call square
mv s0, a0

Werte zum richtigen Zeitpunkt in die richtigen Register zu legen, ist ein großer Teil der Assemblerprogrammierung, und mv erledigt das.

Das RISC-V-Handbuch stellt fest, dass addi mit der Konstante 0 die Assembler-Pseudoinstruktion mv implementiert.

Da mv den Wert kopiert, lässt eine spätere Änderung des Ziels die Quelle unverändert. Das macht mv nützlich, um eine Kopie eines Werts zu behalten, bevor eine Schleife das Original ändert. Die Trace-Ausgabe des Simulators zeigt das addi, das anstelle von mv ausgeführt wird.

Wird erweitert zu

addi rd, rs, 0

Der Assembler ersetzt diese Pseudoanweisung durch die oben aufgeführte(n) echte(n) Anweisung(en).

Beispiel

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