xor

xor

RISC-V 어셈블리 참조

lyszt.net은 xor 및 기타 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

설명

xor는 비트 단위 명령어입니다. and와 or처럼 레지스터의 32개 위치에 대해 연산합니다(비트 단위 연산은 and 페이지에서 다룹니다). 이름은 exclusive OR을 의미합니다. 각 위치에서 결과는 두 입력 비트가 다를 때(하나는 0, 하나는 1) 1이 되고, 일치할 때 0이 됩니다. 아래 형식은 이를 rs1과 rs2에 적용하고 결과를 rd에 씁니다.

xor rd, rs1, rs2

XOR을 유용하게 만드는 두 가지 속성이 있습니다. 값은 자기 자신과 XOR하면 0이 됩니다. 모든 비트가 자기 자신과 일치하기 때문입니다. 따라서 다음 줄은 레지스터를 0으로 설정합니다.

xor t0, t0, t0

마스크와의 XOR은 마스크가 1인 비트를 뒤집고 나머지는 그대로 둡니다. 두 번 뒤집으면 원래 값이 복원됩니다. 간단한 암호화와 오류 검사가 이에 의존합니다.

XOR은 동등성도 검사합니다. 아래 줄 이후 t2는 두 입력이 동일하면 0이고 다르면 0이 아니며, 분기로 그 결과를 검사할 수 있습니다.

xor t2, t0, t1

RISC-V 매뉴얼은 xor를 레지스터-레지스터 연산 중 하나로 나열하며, rs1과 rs2를 읽고 결과를 rd에 씁니다. 이는 비트 단위 논리 배타적 OR을 수행합니다.

이 예제는 t0가 이전에 무엇을 담고 있었든 0으로 지웁니다. 상수 0을 사용하는 li 명령어(load immediate)도 같은 일을 합니다.

예시

xor t0, t0, t0   # t0 = 0