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