csrr
pseudolyszt.net cubre csrr y otras instrucciones RISC-V con más detalle.
Descripción
csrr lee un registro de control en un registro general. Un registro de control y estado, o CSR, contiene el estado del procesador, como la dirección del manejador de traps y la causa del último trap (véase csrrw). La forma siguiente copia el valor del CSR en rd.
csrr rd, csr
El ensamblador lo trata como una pseudoinstrucción, un nombre legible que reescribe como una instrucción real. Se convierte en la instrucción siguiente. Como rs1 es zero, se lee el CSR y no se escribe nada en él.
csrrs rd, csr, zero
Un manejador de traps comienza leyendo dos CSR. mepc contiene la dirección de la instrucción interrumpida y mcause contiene el motivo del trap.
csrr t0, mcause
El bit más alto de mcause es 1 para una interrupción y 0 para una excepción. Los bits bajos son el código de causa. La interrupción del botón en este simulador deja 0x8000000b, que es una interrupción con código 11, la interrupción externa de máquina.
El manual de RISC-V define csrr rd, csr como csrrs rd, csr, x0.
Se expande a
csrrs rd, csr, zero
El ensamblador reemplaza esta pseudoinstrucción con la instrucción o instrucciones reales enumeradas arriba.
Ejemplo
csrr t0, mstatus # t0 = mstatus
