csrw
Pseudoelementlyszt.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
