csrw
псевдоlyszt.net охоплює csrw та інші інструкції RISC-V більш детально.
Опис
csrw копіює регістр у керуючий регістр. Регістр керування та стану, або CSR, зберігає стан процесора, як-от адресу обробника пасток і перемикачі переривань (див. csrrw). Наведена нижче форма копіює rs у CSR і відкидає старе значення.
csrw csr, rs
Це псевдоінструкція — читабельна назва, яку асемблер переписує в справжню інструкцію. Вона стає інструкцією нижче, де rd — це zero, тож старе значення не читається.
csrrw zero, csr, rs
Найпоширеніше використання задає обробник пасток. Рядки нижче поміщають адресу мітки handler у mtvec.
la t0, handler csrw mtvec, t0
Два молодші біти mtvec вибирають режим. За 00 кожна пастка переходить на адресу в mtvec. За 01, так званого векторного режиму, переривання переходить на адресу плюс 4, помножене на його код причини, тож переривання кнопки, код 11, потрапляє на 44 байти після базової адреси. Сама адреса повинна мати вільними два молодші біти, бо вони зберігають режим.
Посібник RISC-V визначає csrw csr, rs1 як csrrw x0, csr, rs1.
Розгортається до
csrrw zero, csr, rs
Асемблер замінює цю псевдоінструкцію реальною інструкцією або інструкціями, переліченими вище.
Приклад
li t0, 0x100 csrw mtvec, t0 # mtvec = 0x100
