or
lyszt.net은 or 및 기타 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
설명
or는 비트 단위 명령어이므로 레지스터의 32비트에 대해 독립적으로 동작합니다(and 페이지에서 설명합니다). 특정 비트 위치에서 결과는 입력 비트 중 하나가 1이거나 둘 다 1이면 1이 됩니다. 결과가 0이 되는 것은 두 입력이 모두 0일 때뿐입니다. 아래 형식은 이를 rs1과 rs2의 모든 32개 위치에 적용하고 결과를 rd에 씁니다.
or rd, rs1, rs2
OR은 비트를 설정합니다. 한 비트를 켜고 나머지는 그대로 두려면, 해당 위치에만 1이 있는 마스크와 값을 OR하면 됩니다. 하나의 레지스터에 압축된 설정과 플래그는 이런 방식으로 켜집니다.
OR은 값을 병합하기도 합니다. 두 값이 겹치지 않는 위치로 시프트되면, 한 번의 OR로 둘을 하나의 레지스터로 결합할 수 있습니다. 별도의 빨강, 초록, 파랑 값을 하나의 색으로 결합하는 것도 같은 방식입니다.
RISC-V 매뉴얼은 or를 레지스터-레지스터 연산 중 하나로 나열합니다. 소스 레지스터 rs1과 rs2를 읽고, 비트 단위 논리 OR을 수행한 뒤 결과를 목적 레지스터 rd에 씁니다.
OR은 비트를 1로 설정할 수만 있습니다. 비트를 지우려면 마스크와 AND를 하고, 비트를 뒤집으려면 XOR를 합니다. ori는 레지스터와 고정 상수를 OR하는 버전입니다.
예시
li t0, 0b1100 li t1, 0b0011 or t2, t0, t1 # t2 = 0b1111
