srli

srli

RISC-V 어셈블리 참조

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

설명

srli는 비트를 고정된 양만큼 오른쪽으로 이동하고 비워진 상위 위치에 0을 채웁니다. 이는 srl의 상수량 형태이며, srl은 그 동작 원리와 0 채우기를 다룹니다. i는 즉시값(immediate), 즉 명령어에 인코딩된 상수를 의미합니다.

srli의 형식은 아래에 나와 있으며, amount는 0에서 31까지의 고정된 숫자입니다.

srli rd, rs1, amount

오른쪽 시프트는 이동하는 자리마다 숫자를 한 번씩 절반으로 만들고, 0 채우기는 값을 결코 음수가 아닌 것으로 취급하므로, srli는 부호 없는 숫자를 2의 거듭제곱으로 나누어 나머지가 없게 합니다. 다음 줄은 t0를 4로 나눕니다.

srli t0, t0, 2

마스킹 AND와 결합하면, srli는 패킹된 값에서 하나의 필드를 추출합니다. 필드를 최하위까지 시프트한 다음, andi를 적용하여 그 비트만 유지합니다. 워드의 두 번째 바이트를 읽으려면 8만큼 오른쪽 시프트하고 0xff와 AND 연산을 합니다.

RISC-V 매뉴얼은 상수 시프트를 표준 명령어 레이아웃 중 하나인 I-type 형식의 특수화로 인코딩합니다. 시프트 양은 즉시값 필드의 하위 5비트를 차지하고, 명령어의 비트 30이 두 오른쪽 시프트를 구분합니다. srli는 논리 오른쪽 시프트를 수행하며, 0이 상위 비트로 들어갑니다.

srli는 항상 0으로 채웁니다. 이는 원시 비트 패턴과 결코 음수가 되지 않는 숫자에 적합합니다. 음수가 될 수 있는 부호 있는 값에서는 0이 부호 표시를 덮어씁니다. 2의 거듭제곱으로 하는 부호 있는 나눗셈에는 srai를 사용합니다. 둘 중 어느 것을 선택할지는 레지스터의 비트를 어떻게 읽는지를 반영합니다.

예시

li t0, -8
srli t1, t0, 1   # t1 = 2147483644 (zero-filled)