xori

xori

RISC-V 어셈블리 참조

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

인코딩 형식

R
31–25funct7
24–20rs2
19–15rs1
14–12funct3
11–7rd
6–0opcode
I
31–20imm[11:0]
19–15rs1
14–12funct3
11–7rd
6–0opcode
S
31–25imm[11:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:0]
6–0opcode
B
31–25imm[12,10:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:1,11]
6–0opcode
U
31–12imm[31:12]
11–7rd
6–0opcode
J
31–12imm[20,10:1,11,19:12]
11–7rd
6–0opcode

설명

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)