csrwпсевдо

csrw

псевдо
RISC-V Ассемблер Ссылка

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

Описание

csrw копирует регистр в управляющий регистр. Регистр управления и состояния, или CSR, хранит состояние процессора, такое как адрес обработчика ловушек и переключатели прерываний (см. csrrw). Приведённая ниже форма копирует rs в CSR и отбрасывает старое значение.

csrw csr, rs

Это псевдоинструкция — читаемое имя, которое ассемблер переписывает в реальную инструкцию. Она превращается в инструкцию ниже, где rd — это zero, поэтому старое значение не читается.

csrrw zero, csr, rs

Наиболее частое применение задаёт обработчик ловушек. Строки ниже помещают адрес метки handler в mtvec.

la t0, handler
csrw mtvec, t0

Два младших бита mtvec выбирают режим. При 00 каждая ловушка переходит по адресу в mtvec. При 01, так называемом векторном режиме, прерывание переходит по адресу плюс 4, умноженное на его код причины, поэтому прерывание кнопки, код 11, попадает на 44 байта после базового адреса. Сам адрес должен иметь свободными два младших бита, поскольку они хранят режим.

Руководство RISC-V определяет csrw csr, rs1 как csrrw x0, csr, rs1.

Разворачивается в

csrrw zero, csr, rs

Ассемблер заменяет эту псевдоинструкцию реальной инструкцией или инструкциями, перечисленными выше.

Пример

li t0, 0x100
csrw mtvec, t0   # mtvec = 0x100