csrrpseudo

csrr

pseudo
Ensamblador RISC-V Referencia

lyszt.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