csrw
pseudolyszt.net cubre csrw y otras instrucciones RISC-V con más detalle.
Descripción
csrw copia un registro en un registro de control. Un registro de control y estado, o CSR, contiene el estado del procesador, como la dirección del manejador de trampas y los interruptores de interrupciones (véase csrrw). La forma siguiente copia rs en el CSR y descarta el valor antiguo.
csrw csr, rs
Es una pseudoinstrucción, un nombre legible que el ensamblador reescribe como una instrucción real. Se convierte en la instrucción siguiente, donde rd es zero para que no se lea el valor antiguo.
csrrw zero, csr, rs
El uso más común establece el manejador de trampas. Las líneas siguientes colocan la dirección de la etiqueta handler en mtvec.
la t0, handler csrw mtvec, t0
Los dos bits bajos de mtvec seleccionan el modo. Con 00, cada trampa salta a la dirección de mtvec. Con 01, llamado modo vectorizado, una interrupción salta a la dirección más 4 veces su código de causa, por lo que la interrupción del botón, código 11, aterriza 44 bytes después de la dirección base. La dirección misma debe tener sus dos bits bajos libres, porque contienen el modo.
El manual de RISC-V define csrw csr, rs1 como csrrw x0, csr, rs1.
Se expande a
csrrw zero, csr, rs
El ensamblador reemplaza esta pseudoinstrucción con la instrucción o instrucciones reales enumeradas arriba.
Ejemplo
li t0, 0x100 csrw mtvec, t0 # mtvec = 0x100
