csrr
pseudolyszt.net aborda csrr e outras instruções RISC-V com mais detalhes.
Descrição
csrr lê um registrador de controle em um registrador de uso geral. Um registrador de controle e status, ou CSR, armazena o estado do processador, como o endereço do tratador de trap e a causa do último trap (consulte csrrw). A forma abaixo copia o valor do CSR para rd.
csrr rd, csr
O montador a trata como uma pseudoinstrução, um nome legível que ele reescreve em uma instrução real. Ela se torna a instrução abaixo. Como rs1 é zero, o CSR é lido e nada é escrito nele.
csrrs rd, csr, zero
Um tratador de trap começa lendo dois CSRs. mepc contém o endereço da instrução interrompida e mcause contém o motivo do trap.
csrr t0, mcause
O bit mais significativo de mcause é 1 para uma interrupção e 0 para uma exceção. Os bits menos significativos são o código da causa. A interrupção do botão neste simulador deixa 0x8000000b, que é uma interrupção com código 11, a interrupção externa de máquina.
O manual do RISC-V define csrr rd, csr como csrrs rd, csr, x0.
Expande para
csrrs rd, csr, zero
O montador substitui esta pseudoinstrução pela instrução ou instruções reais listadas acima.
Exemplo
csrr t0, mstatus # t0 = mstatus
