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
