csrrs
lyszt.net cubre csrrs y otras instrucciones RISC-V con más detalle.
Descripción
csrrs lee un registro de control y establece bits en él. Un registro de control y estado, o CSR, contiene el estado del procesador, como la dirección del manejador de traps y los interruptores de interrupciones (véase csrrw). El nombre es la abreviatura de atomic read and set bits in CSR (lectura atómica y establecimiento de bits en CSR). El valor antiguo del CSR se coloca en rd, y luego cada bit que es 1 en rs1 se establece a 1 en el CSR. Los bits que son 0 en rs1 conservan su valor.
csrrs rd, csr, rs1
El registro rs1 funciona como una máscara, un patrón cuyos bits a 1 eligen qué bits cambiar. Las líneas siguientes establecen el bit 3 de mstatus, la habilitación global de interrupciones, y dejan el valor anterior en t1.
li t0, 8 csrrs t1, mstatus, t0
El 8 es 1000 en binario, así que solo cambia el bit 3. Cuando rs1 es zero, el CSR se lee y nunca se escribe, lo cual es la forma abreviada csrr. Cuando rd es zero, el valor antiguo se descarta, lo cual es la forma abreviada csrs. Véase csrrw para la lista de CSRs en este simulador y csrrc para borrar bits.
El manual de RISC-V dice que csrrs con rs1=x0 no escribe el CSR en absoluto.
Ejemplo
li t0, 8 csrrs t1, mstatus, t0 # sets bit 3 of mstatus, t1 = old mstatus
