csrw
pseudolyszt.net couvre csrw et d'autres instructions RISC-V plus en détail.
Description
csrw copie un registre dans un registre de contrôle. Un registre de contrôle et d'état, ou CSR, contient l'état du processeur tel que l'adresse du gestionnaire de trappe et les commutateurs d'interruption (voir csrrw). La forme ci-dessous copie rs dans le CSR et ignore l'ancienne valeur.
csrw csr, rs
C'est une pseudo-instruction, un nom lisible que l'assembleur réécrit en une instruction réelle. Elle devient l'instruction ci-dessous, où rd est zero afin que l'ancienne valeur ne soit pas lue.
csrrw zero, csr, rs
L'utilisation la plus courante définit le gestionnaire de trappe. Les lignes ci-dessous placent l'adresse de l'étiquette handler dans mtvec.
la t0, handler csrw mtvec, t0
Les deux bits de poids faible de mtvec sélectionnent le mode. Avec 00, chaque trappe saute à l'adresse contenue dans mtvec. Avec 01, appelé mode vectorisé, une interruption saute à l'adresse plus 4 fois son code de cause, de sorte que l'interruption du bouton, code 11, atterrit 44 octets après l'adresse de base. L'adresse elle-même doit avoir ses deux bits de poids faible libres, car ils contiennent le mode.
Le manuel RISC-V définit csrw csr, rs1 comme csrrw x0, csr, rs1.
Se développe en
csrrw zero, csr, rs
L'assembleur remplace cette pseudo-instruction par la ou les instructions réelles listées ci-dessus.
Exemple
li t0, 0x100 csrw mtvec, t0 # mtvec = 0x100
