csrwPseudoelement

csrw

Pseudoelement
RISC-V Assembler Referenz

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

Beschreibung

csrw kopiert ein Register in ein Steuerregister. Ein Steuer- und Statusregister, oder CSR, enthält den Prozessorzustand wie die Adresse des Trap-Handlers und die Interrupt-Schalter (siehe csrrw). Die folgende Form kopiert rs in das CSR und verwirft den alten Wert.

csrw csr, rs

Es ist eine Pseudoinstruktion, ein lesbarer Name, den der Assembler in eine echte Instruktion umschreibt. Sie wird zur untenstehenden Instruktion, wobei rd zero ist, sodass der alte Wert nicht gelesen wird.

csrrw zero, csr, rs

Die häufigste Verwendung setzt den Trap-Handler. Die folgenden Zeilen legen die Adresse des Labels handler in mtvec ab.

la t0, handler
csrw mtvec, t0

Die unteren zwei Bits von mtvec wählen den Modus. Bei 00 springt jeder Trap zur Adresse in mtvec. Bei 01, vektorisierter Modus genannt, springt ein Interrupt zur Adresse plus dem Vierfachen seines Ursachencodes, sodass der Tasten-Interrupt, Code 11, 44 Bytes hinter der Basisadresse landet. Die Adresse selbst muss ihre unteren zwei Bits frei haben, da sie den Modus enthalten.

Das RISC-V-Handbuch definiert csrw csr, rs1 als csrrw x0, csr, rs1.

Wird erweitert zu

csrrw zero, csr, rs

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

Beispiel

li t0, 0x100
csrw mtvec, t0   # mtvec = 0x100