csrw
의사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의 하위 2비트가 모드를 선택합니다. 00이면 모든 트랩이 mtvec의 주소로 점프합니다. 01이면 벡터 모드라고 하며, 인터럽트는 해당 주소에 원인 코드의 4배를 더한 곳으로 점프하므로, 버튼 인터럽트(코드 11)는 기준 주소에서 44바이트 떨어진 곳에 도착합니다. 주소 자체의 하위 2비트는 모드를 보관하므로 비어 있어야 합니다.
RISC-V 매뉴얼은 csrw csr, rs1을 csrrw x0, csr, rs1로 정의합니다.
확장 대상
csrrw zero, csr, rs
어셈블러는 이 의사 명령을 위에 나열된 실제 명령 또는 명령들로 대체합니다.
예시
li t0, 0x100 csrw mtvec, t0 # mtvec = 0x100
