csrrпсевдо

csrr

псевдо
Асемблер RISC-V Посилання

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