csrrw
lyszt.net охоплює csrrw та інші інструкції RISC-V більш детально.
Опис
csrrw обмінює керуючий регістр із регістром загального призначення. Регістр керування та стану (CSR) — це спеціальний регістр, який зберігає стан процесора, зокрема адресу обробника пасток і те, чи ввімкнено переривання. CSR має 12-бітний номер і зазвичай назву, як-от mtvec. Лише інструкції CSR можуть отримувати доступ до CSR, а lw або sw не можуть. Назва означає атомарне читання й запис CSR. Атомарне означає, що читання й запис відбуваються як один неподільний крок.
csrrw rd, csr, rs1
Старе значення CSR записується в rd, а значення rs1 записується в CSR. Наведений нижче рядок зберігає адресу з t0 у mtvec і залишає попереднє значення mtvec у t1.
csrrw t1, mtvec, t0
Якщо rd — це zero, старе значення відкидається, і CSR не читається. Ця форма — скорочення csrw. Якщо rs1 — це zero, CSR перезаписується нулем.
Цей симулятор надає шість CSR: mstatus, mie, mtvec, mepc, mcause і mip. Записи в mip ігноруються, оскільки його встановлює апаратне забезпечення. Будь-який інший номер CSR читається як 0 і ігнорує записи. Див. csrr для читання та csrs і csrc для зміни окремих бітів.
Посібник RISC-V зазначає, що з rd=x0 csrrw не читає CSR, а csrrw з rs1=x0 намагається записати в нього нуль.
Приклад
li t0, 0x100 csrrw t1, mtvec, t0 # mtvec = 0x100, t1 = old mtvec
