csrrw
lyszt.net behandelt csrrw und andere RISC-V-Befehle ausführlicher.
Beschreibung
csrrw tauscht ein Steuerregister mit einem Allzweckregister. Ein Steuer- und Statusregister (CSR) ist ein spezielles Register, das den Prozessorzustand enthält, einschließlich der Adresse des Trap-Handlers und ob Interrupts aktiviert sind. Ein CSR hat eine 12-Bit-Nummer und typischerweise einen Namen wie mtvec. Nur CSR-Befehle können auf CSRs zugreifen, lw oder sw können dies nicht. Der Name steht für atomares Lesen und Schreiben eines CSR. Atomar bedeutet, dass das Lesen und das Schreiben als ein einziger unteilbarer Schritt erfolgen.
csrrw rd, csr, rs1
Der alte Wert des CSR wird nach rd geschrieben, und der Wert von rs1 wird in das CSR geschrieben. Die folgende Zeile speichert die Adresse in t0 in mtvec und hinterlässt den vorherigen mtvec-Wert in t1.
csrrw t1, mtvec, t0
Wenn rd zero ist, wird der alte Wert verworfen und das CSR nicht gelesen. Diese Form ist die csrw-Kurzschreibweise. Wenn rs1 zero ist, wird das CSR mit 0 überschrieben.
Dieser Simulator stellt sechs CSRs bereit: mstatus, mie, mtvec, mepc, mcause und mip. Schreibzugriffe auf mip werden ignoriert, da die Hardware es setzt. Jede andere CSR-Nummer wird als 0 gelesen und ignoriert Schreibzugriffe. Siehe csrr zum Lesen und csrs und csrc zum Ändern einzelner Bits.
Das RISC-V-Handbuch besagt, dass csrrw mit rd=x0 das CSR nicht liest und dass csrrw mit rs1=x0 versucht, null hineinzuschreiben.
Beispiel
li t0, 0x100 csrrw t1, mtvec, t0 # mtvec = 0x100, t1 = old mtvec
