xori
lyszt.net은 xori 및 기타 RISC-V 명령어를 더 자세히 다룹니다.
인코딩 형식
설명
xori는 상수와 비트 단위 XOR을 수행합니다. andi와 ori와 함께 즉시 논리 명령어를 완성합니다. i는 즉시(immediate)를 의미합니다. 즉, 명령어에 인코딩된 고정 값이므로 두 번째 레지스터가 필요하지 않습니다. XOR은 두 비트가 다를 때 해당 비트 위치에서 1을 반환합니다(xor 페이지 참조). 상수 마스크가 주어지면 마스크의 1은 해당 비트를 뒤집고 0은 그 비트를 변경하지 않습니다.
xori의 구문은 아래에 나와 있습니다. rs1의 값과 상수 imm을 XOR하고 결과를 rd에 씁니다.
xori rd, rs1, imm
andi는 선택된 비트를 지우고, ori는 그것들을 설정하며, xori는 그것들을 반전시킵니다. 두 번 반전하면 원래 값으로 돌아갑니다.
xori는 not 명령어도 제공합니다. 값의 모든 비트를 뒤집는 것은 모두 1인 마스크와의 XOR을 의미하며, not은 아래 줄의 축약형입니다. 왜냐하면 비트에서 -1은 모두 1이기 때문입니다. RISC-V에는 모든 비트를 반전시키는 전용 명령어가 없습니다.
xori rd, rs, -1
RISC-V 매뉴얼에는 12비트 즉시 값이 연산 전에 32비트로 부호 확장된다고 명시되어 있으므로 상수 -1은 모두 1인 마스크가 됩니다. 매뉴얼은 상수 -1을 사용하는 xori를 레지스터의 비트 단위 논리 반전으로 나열하며, 이것이 not 의사 명령어입니다.
흔한 작은 용도는 0 또는 1로 유지되는 예/아니오 값을 토글하는 것입니다. 다음 줄은 실행될 때마다 그것을 다른 상태로 전환합니다.
xori t0, t0, 1
상수는 12비트로 제한됩니다. 더 넓은 패턴의 경우 마스크를 레지스터에 로드하고 xor를 사용하세요.
예시
li t0, 0 xori t1, t0, -1 # t1 = -1 (every bit flipped)
