csrrw
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
