srl

srl

RISC-V 어셈블리 참조

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

설명

srl은 비트를 오른쪽으로 이동하며, 이는 sll이 하는 것의 반대입니다. 이 글자들은 shift right logical을 나타냅니다. 이 형식은 rs1의 비트를 가져와 rs2의 카운트만큼 오른쪽으로 이동하고, 그 결과를 rd에 저장합니다.

srl rd, rs1, rs2

오른쪽 끝을 넘어 밀려난 비트는 손실되며, 비워진 왼쪽 자리는 0으로 채워집니다.

이 0 채우기가 logical이라는 단어의 이유를 설명합니다. 오른쪽 시프트는 값을 절반으로 만들므로, 1만큼 시프트하면 2로 나누고 3만큼 시프트하면 8로 나눕니다. 나머지는 버려지며, 이는 정수 나눗셈과 일치합니다. srl은 부호 없는 수를 2의 거듭제곱으로 빠르게 나눕니다.

오른쪽 시프트 명령어가 두 개 있으며, 차이는 비워진 상위 비트에 무엇이 들어가는지입니다. srl은 그곳에 0을 넣습니다. 대응하는 sra는 부호 비트를 그 위치에 복사하여 음수의 부호를 보존합니다. 원시 비트 패턴이나 음수가 될 수 없는 값에는 srl을 선택하세요. 음수가 될 수 있는 부호 있는 값에서는 srl이 큰 양수를 생성하며, 그 경우 sra가 올바른 명령어입니다.

RISC-V 매뉴얼에 따르면, 시프트 카운트는 레지스터 rs2의 하위 5비트를 차지합니다. 그 5비트는 0에서 31까지의 범위를 가지므로, rs2의 나머지 비트는 무시됩니다. 매뉴얼은 srl을 논리 오른쪽 시프트라고 부르며, 상위에 0을 삽입합니다.

시프트 카운트가 상수일 때는 즉시 형식 srli를 사용하세요.

예시

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