sra

sra

RISC-V 어셈블리 참조

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

설명

sra는 두 번째 오른쪽 시프트로, srl 옆에 있습니다. 이름은 shift right arithmetic의 약자입니다. 아래 형식은 rs1을 rs2에 담긴 양만큼 오른쪽으로 시프트합니다.

sra rd, rs1, rs2

다른 오른쪽 시프트와 마찬가지로 비트를 하위 쪽으로 이동시키고 떨어져 나가는 비트는 버립니다. 비어 있는 상위 위치의 처리 방식이 srl과 다릅니다.

RISC-V는 최상위 비트가 부호를 나타내는 부호 있는 방식을 사용하며, 그곳이 1이면 그 수는 음수입니다. srl은 상위를 0으로 채우므로 부호 표시가 지워지고 음수가 큰 양수가 됩니다. sra는 상위를 기존 부호 비트의 복사본으로 채우므로 음수에는 1, 양수에는 0이 채워집니다. 수는 부호를 유지합니다.

sra는 부호 있는 수를 2의 거듭제곱으로 나눕니다. 1만큼 시프트하면 절반이 되고, 3만큼 시프트하면 8로 나누어지며, 음수는 음수로 남습니다. 결과는 아래쪽, 즉 더 음의 값으로 반올림되므로 -7을 오른쪽으로 1만큼 시프트하면 -4가 되지만 div 명령은 -3을 줍니다. 그래픽 및 오디오 코드는 보통 아래쪽 반올림을 받아들입니다.

RISC-V 매뉴얼은 시프트 양을 레지스터 rs2의 하위 5비트에 담습니다. 5비트는 0에서 31자리를 커버하므로 rs2의 다른 비트는 효과가 없습니다. 매뉴얼은 sra를 산술 오른쪽 시프트로 설명하며, 원래 부호 비트를 비워진 상위 비트에 복사합니다.

부호 있는 수에는 sra를, 원시 비트 패턴이나 결코 음수가 되지 않는 수에는 srl을 사용하세요. 고정된 양에는 상수 형식 srai를 사용하세요.

예시

li t0, -8
li t1, 1
sra t2, t0, t1   # t2 = -4 (sign-filled)