csrrw

csrrw

Ensamblador RISC-V Referencia

lyszt.net cubre csrrw y otras instrucciones RISC-V con más detalle.

Descripción

csrrw intercambia un registro de control con un registro general. Un registro de control y estado (CSR) es un registro especial que contiene el estado del procesador, incluida la dirección del manejador de traps y si las interrupciones están habilitadas. Un CSR tiene un número de 12 bits y normalmente un nombre como mtvec. Solo las instrucciones CSR pueden acceder a los CSR, y lw o sw no pueden. El nombre significa lectura y escritura atómica de CSR. Atómica significa que la lectura y la escritura ocurren como un único paso indivisible.

csrrw rd, csr, rs1

El valor antiguo del CSR se escribe en rd, y el valor de rs1 se escribe en el CSR. La línea siguiente almacena la dirección en t0 en mtvec y deja el valor anterior de mtvec en t1.

csrrw t1, mtvec, t0

Si rd es zero, el valor antiguo se descarta y el CSR no se lee. Esta forma es la abreviatura csrw. Si rs1 es zero, el CSR se sobrescribe con 0.

Este simulador proporciona seis CSR: mstatus, mie, mtvec, mepc, mcause y mip. Las escrituras en mip se ignoran porque el hardware lo establece. Cualquier otro número de CSR se lee como 0 e ignora las escrituras. Consulte csrr para leer y csrs y csrc para cambiar bits individuales.

El manual de RISC-V indica que con rd=x0, csrrw no lee el CSR, y que csrrw con rs1=x0 intenta escribir cero en él.

Ejemplo

li t0, 0x100
csrrw t1, mtvec, t0   # mtvec = 0x100, t1 = old mtvec