csrr
псевдоlyszt.net охоплює csrr та інші інструкції RISC-V більш детально.
Опис
csrr читає керуючий регістр у регістр загального призначення. Керуючий регістр і регістр стану, або CSR, зберігає стан процесора, як-от адресу обробника пасток і причину останньої пастки (див. csrrw). Наведена нижче форма копіює значення CSR у rd.
csrr rd, csr
Асемблер розглядає її як псевдоінструкцію — читабельну назву, яку він переписує в справжню інструкцію. Вона стає наведеною нижче інструкцією. Оскільки rs1 — це zero, CSR читається, і в нього нічого не записується.
csrrs rd, csr, zero
Обробник пасток починається з читання двох CSR. mepc зберігає адресу перерваної інструкції, а mcause зберігає причину пастки.
csrr t0, mcause
Найстарший біт mcause дорівнює 1 для переривання та 0 для винятку. Молодші біти — це код причини. Переривання від кнопки в цьому симуляторі залишає 0x8000000b, що є перериванням із кодом 11 — машинним зовнішнім перериванням.
Посібник RISC-V визначає csrr rd, csr як csrrs rd, csr, x0.
Розгортається до
csrrs rd, csr, zero
Асемблер замінює цю псевдоінструкцію реальною інструкцією або інструкціями, переліченими вище.
Приклад
csrr t0, mstatus # t0 = mstatus
