csrrs
lyszt.net behandelt csrrs und andere RISC-V-Befehle ausführlicher.
Beschreibung
csrrs liest ein Steuerregister aus und setzt Bits darin. Ein Steuer- und Statusregister, oder CSR, enthält den Prozesszustand wie die Adresse des Trap-Handlers und die Interrupt-Schalter (siehe csrrw). Der Name steht für atomic read and set bits in CSR. Der alte Wert des CSR gelangt in rd, dann wird jedes Bit, das in rs1 1 ist, im CSR auf 1 gesetzt. Bits, die in rs1 0 sind, behalten ihren Wert.
csrrs rd, csr, rs1
Register rs1 wirkt als Maske, ein Muster, dessen 1-Bits bestimmen, welche Bits geändert werden. Die unten stehenden Zeilen setzen Bit 3 von mstatus, die globale Interrupt-Enable, und lassen den vorherigen Wert in t1.
li t0, 8 csrrs t1, mstatus, t0
Die 8 ist binär 1000, also ändert sich nur Bit 3. Wenn rs1 zero ist, wird der CSR gelesen und nie geschrieben, was die Kurzform csrr ist. Wenn rd zero ist, wird der alte Wert verworfen, was die Kurzform csrs ist. Siehe csrrw für die Liste der CSRs in diesem Simulator und csrrc zum Löschen von Bits.
Das RISC-V-Handbuch sagt, dass csrrs mit rs1=x0 den CSR überhaupt nicht schreibt.
Beispiel
li t0, 8 csrrs t1, mstatus, t0 # sets bit 3 of mstatus, t1 = old mstatus
