csrr
pseudolyszt.net couvre csrr et d'autres instructions RISC-V plus en détail.
Description
csrr lit un registre de contrôle dans un registre général. Un registre de contrôle et d'état, ou CSR, contient l'état du processeur tel que l'adresse du gestionnaire de trappe et la cause de la dernière trappe (voir csrrw). La forme ci-dessous copie la valeur du CSR dans rd.
csrr rd, csr
L'assembleur la traite comme une pseudo-instruction, un nom lisible qu'il réécrit en une instruction réelle. Elle devient l'instruction ci-dessous. Comme rs1 vaut zero, le CSR est lu et rien ne lui est écrit.
csrrs rd, csr, zero
Un gestionnaire de trappe commence par lire deux CSR. mepc contient l'adresse de l'instruction interrompue et mcause contient la raison de la trappe.
csrr t0, mcause
Le bit de poids fort de mcause vaut 1 pour une interruption et 0 pour une exception. Les bits de poids faible sont le code de cause. L'interruption du bouton dans ce simulateur laisse 0x8000000b, qui est une interruption de code 11, l'interruption externe machine.
Le manuel RISC-V définit csrr rd, csr comme csrrs rd, csr, x0.
Se développe en
csrrs rd, csr, zero
L'assembleur remplace cette pseudo-instruction par la ou les instructions réelles listées ci-dessus.
Exemple
csrr t0, mstatus # t0 = mstatus
