csrrw

csrrw

RISC-V 어셈블리 참조

lyszt.net은 csrrw 및 기타 RISC-V 명령어를 더 자세히 다룹니다.

설명

csrrw는 제어 레지스터와 범용 레지스터를 교환합니다. 제어 및 상태 레지스터(CSR)는 트랩 핸들러 주소와 인터럽트 활성화 여부를 포함한 프로세서 상태를 보관하는 특수 레지스터입니다. CSR은 12비트 번호를 가지며 일반적으로 mtvec와 같은 이름을 갖습니다. CSR에 접근할 수 있는 것은 CSR 명령뿐이며, lw나 sw는 접근할 수 없습니다. 이 이름은 atomic read and write CSR의 약자입니다. Atomic은 읽기와 쓰기가 하나의 분할할 수 없는 단계로 발생한다는 뜻입니다.

csrrw rd, csr, rs1

CSR의 이전 값은 rd에 기록되고, rs1의 값은 CSR에 기록됩니다. 다음 줄은 t0의 주소를 mtvec에 저장하고 이전 mtvec 값을 t1에 남깁니다.

csrrw t1, mtvec, t0

rd가 zero이면 이전 값은 버려지고 CSR은 읽히지 않습니다. 이 형식은 csrw 축약형입니다. rs1이 zero이면 CSR은 0으로 덮어써집니다.

이 시뮬레이터는 여섯 개의 CSR을 제공합니다: mstatus, mie, mtvec, mepc, mcause, mip. mip에 대한 쓰기는 하드웨어가 설정하므로 무시됩니다. 다른 CSR 번호는 0으로 읽히고 쓰기는 무시됩니다. 읽기는 csrr을, 단일 비트 변경은 csrs와 csrc를 참조하세요.

RISC-V 매뉴얼에 따르면 rd=x0일 때 csrrw는 CSR을 읽지 않으며, rs1=x0인 csrrw는 CSR에 0을 쓰려고 시도합니다.

예시

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