csrwpseudo

csrw

pseudo
Assembly RISC-V Referência

lyszt.net aborda csrw e outras instruções RISC-V com mais detalhes.

Descrição

csrw copia um registrador para um registrador de controle. Um registrador de controle e status, ou CSR, mantém o estado do processador, como o endereço do tratador de trap e os interruptores de interrupção (veja csrrw). A forma abaixo copia rs para o CSR e descarta o valor antigo.

csrw csr, rs

É uma pseudoinstrução, um nome legível que o montador reescreve como uma instrução real. Ela se torna a instrução abaixo, onde rd é zero para que o valor antigo não seja lido.

csrrw zero, csr, rs

O uso mais comum define o tratador de trap. As linhas abaixo colocam o endereço do rótulo handler em mtvec.

la t0, handler
csrw mtvec, t0

Os dois bits menos significativos de mtvec selecionam o modo. Com 00, todo trap salta para o endereço em mtvec. Com 01, chamado de modo vetorizado, uma interrupção salta para o endereço mais 4 vezes o seu código de causa, então a interrupção do botão, código 11, cai 44 bytes após o endereço base. O próprio endereço deve ter seus dois bits menos significativos livres, pois eles contêm o modo.

O manual do RISC-V define csrw csr, rs1 como csrrw x0, csr, rs1.

Expande para

csrrw zero, csr, rs

O montador substitui esta pseudoinstrução pela instrução ou instruções reais listadas acima.

Exemplo

li t0, 0x100
csrw mtvec, t0   # mtvec = 0x100