csrrw

csrrw

RISC-V Ассемблер Ссылка

lyszt.net охватывает csrrw и другие инструкции RISC-V более подробно.

Описание

csrrw обменивает управляющий регистр с регистром общего назначения. Регистр управления и состояния (CSR) — это специальный регистр, хранящий состояние процессора, включая адрес обработчика ловушек и информацию о том, включены ли прерывания. CSR имеет 12-битный номер и обычно имя, например mtvec. Только инструкции CSR могут обращаться к CSR, а lw или sw не могут. Название означает атомарное чтение и запись CSR. Атомарное означает, что чтение и запись происходят как один неделимый шаг.

csrrw rd, csr, rs1

Старое значение CSR записывается в rd, а значение rs1 записывается в CSR. Следующая строка сохраняет адрес из t0 в mtvec и оставляет предыдущее значение mtvec в t1.

csrrw t1, mtvec, t0

Если rd — это zero, старое значение отбрасывается, и CSR не читается. Эта форма — сокращение csrw. Если rs1 — это zero, CSR перезаписывается нулём.

Этот симулятор предоставляет шесть CSR: mstatus, mie, mtvec, mepc, mcause и mip. Записи в mip игнорируются, поскольку его устанавливает аппаратное обеспечение. Любой другой номер CSR читается как 0 и игнорирует записи. См. csrr для чтения и csrs и csrc для изменения отдельных битов.

Руководство RISC-V утверждает, что при rd=x0 csrrw не читает CSR, а csrrw с rs1=x0 пытается записать в него ноль.

Пример

li t0, 0x100
csrrw t1, mtvec, t0   # mtvec = 0x100, t1 = old mtvec