csrr
의사lyszt.net은 csrr 및 기타 RISC-V 명령어를 더 자세히 다룹니다.
설명
csrr은 제어 레지스터를 범용 레지스터로 읽어들입니다. 제어 및 상태 레지스터(CSR)는 트랩 핸들러 주소와 마지막 트랩의 원인 같은 프로세서 상태를 보관합니다(csrrw 참조). 아래 형식은 CSR의 값을 rd에 복사합니다.
csrr rd, csr
어셈블러는 이를 의사 명령어, 즉 실제 명령어로 다시 작성되는 읽기 쉬운 이름으로 취급합니다. 이는 아래 명령어가 됩니다. rs1이 zero이므로 CSR은 읽히고 아무것도 쓰이지 않습니다.
csrrs rd, csr, zero
트랩 핸들러는 두 개의 CSR을 읽는 것으로 시작합니다. mepc는 중단된 명령어의 주소를 보관하고 mcause는 트랩의 원인을 보관합니다.
csrr t0, mcause
mcause의 최상위 비트는 인터럽트의 경우 1, 예외의 경우 0입니다. 하위 비트는 원인 코드입니다. 이 시뮬레이터의 버튼 인터럽트는 0x8000000b를 남기며, 이는 코드 11의 인터럽트, 즉 머신 외부 인터럽트입니다.
RISC-V 매뉴얼은 csrr rd, csr을 csrrs rd, csr, x0으로 정의합니다.
확장 대상
csrrs rd, csr, zero
어셈블러는 이 의사 명령을 위에 나열된 실제 명령 또는 명령들로 대체합니다.
예시
csrr t0, mstatus # t0 = mstatus
