and
lyszt.net은 and 및 기타 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
설명
and는 비트 단위 명령어입니다. 레지스터는 32비트를 담고 있으며, 이는 32개의 개별적인 0과 1이 한 줄로 나열된 것입니다. 비트 단위 명령어는 그 연산을 32개 위치 모두에 독립적으로 적용하며, 위치 사이로 자리올림이 전달되지 않습니다.
단일 비트에서 AND는 두 입력 비트가 모두 1일 때만 1을 반환하고, 그렇지 않으면 0을 반환합니다. 아래 형식은 그 규칙을 32개 위치 모두에 적용하여 rs1과 rs2를 비교하고 결과를 rd에 씁니다.
and rd, rs1, rs2
AND는 마스킹에 사용되며, 일부 비트는 유지하고 나머지는 지웁니다. 마스크가 1인 위치에서는 원래 비트가 그대로 남습니다. 마스크가 0인 위치에서는 결과가 0이 됩니다. 값과 마스크 00001111의 AND를 취하면 하위 4비트는 유지되고 나머지는 지워집니다. 마스킹은 여러 필드를 함께 담은 값에서 하나의 필드를 추출합니다.
RISC-V 매뉴얼은 and, or, xor를 레지스터-레지스터 연산으로 나열합니다. 이들은 모두 소스 레지스터 rs1과 rs2를 읽고, 결과를 목적지 레지스터 rd에 쓰며, 비트 단위 논리 연산을 수행합니다.
예제에서 0b1100(0b 접두사는 이진수를 나타냅니다)은 0b1010과 AND됩니다. 두 입력 모두 가장 왼쪽 위치에만 1이 있으므로 결과는 0b1000이 되고, 이것이 t2에 들어갑니다.
예시
li t0, 0b1100 li t1, 0b1010 and t2, t0, t1 # t2 = 0b1000
