csrrs
lyszt.net은 csrrs 및 기타 RISC-V 명령어를 더 자세히 다룹니다.
설명
csrrs는 제어 레지스터를 읽고 그 안의 비트를 설정합니다. 제어 및 상태 레지스터(CSR)는 트랩 핸들러 주소와 인터럽트 스위치 같은 프로세서 상태를 보관합니다(csrrw 참조). 이름은 CSR의 비트를 원자적으로 읽고 설정한다(atomic read and set bits in CSR)의 줄임말입니다. CSR의 이전 값은 rd에 들어가고, 그런 다음 rs1에서 1인 모든 비트가 CSR에서 1로 설정됩니다. rs1에서 0인 비트는 값을 유지합니다.
csrrs rd, csr, rs1
레지스터 rs1은 마스크, 즉 1 비트가 어떤 비트를 변경할지 선택하는 패턴으로 작동합니다. 아래 줄은 mstatus의 비트 3(전역 인터럽트 활성화)을 설정하고 이전 값을 t1에 남깁니다.
li t0, 8 csrrs t1, mstatus, t0
8은 이진수로 1000이므로 비트 3만 변경됩니다. rs1이 zero일 때 CSR은 읽히기만 하고 절대 쓰이지 않으며, 이것이 csrr 축약형입니다. rd가 zero일 때 이전 값은 버려지며, 이것이 csrs 축약형입니다. 이 시뮬레이터의 CSR 목록은 csrrw를, 비트 지우기는 csrrc를 참조하세요.
RISC-V 매뉴얼에 따르면 rs1=x0인 csrrs는 CSR에 전혀 쓰지 않습니다.
예시
li t0, 8 csrrs t1, mstatus, t0 # sets bit 3 of mstatus, t1 = old mstatus
