csrrpseudo

csrr

pseudo
Assembly RISC-V Referência

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