sll
lyszt.net은 sll 및 기타 RISC-V 명령어를 더 자세히 다룹니다.
인코딩 형식
설명
sll은 숫자의 비트를 왼쪽으로 이동시킵니다. 레지스터는 32비트를 한 줄로 보관하며, 시프트는 전체 줄을 지정된 위치 수만큼 왼쪽이나 오른쪽으로 이동시킵니다. 이름은 shift left logical의 약자입니다. 아래 형식에서 rs1의 값은 rs2에 주어진 자릿수만큼 왼쪽으로 시프트되고, 결과는 rd에 저장됩니다.
sll rd, rs1, rs2
비트가 왼쪽으로 이동하면 오른쪽의 빈 자리는 0으로 채워지고, 왼쪽 끝을 넘어간 비트는 버려집니다.
한 자리 왼쪽 시프트는 숫자를 두 배로 만듭니다. 이는 십진수에 0을 붙이면 10배가 되는 것과 같습니다. 1만큼 시프트하면 2배, 2만큼 시프트하면 4배, 3만큼 시프트하면 8배가 됩니다. 시프트는 곱셈보다 프로세서에 부담이 적어 2의 거듭제곱을 곱하는 빠른 방법입니다. 배열 접근은 이에 의존합니다. 각 요소의 주소는 이전 요소로부터 고정된 2의 거듭제곱 바이트 수만큼 떨어져 있기 때문입니다.
RISC-V 매뉴얼에 따르면 시프트 양은 레지스터 rs2의 하위 5비트에 보관됩니다. 5비트는 0에서 31자리를 커버하므로 rs2의 나머지 비트는 영향을 미치지 않습니다. 매뉴얼은 sll을 논리 왼쪽 시프트라고 부르며, 하위 비트에 0이 들어간다는 의미입니다.
이 형식에서는 시프트 양이 레지스터에서 오므로 프로그램 실행 중에 계산된 양에 적합합니다. 고정된 양에는 slli를 사용하세요. 예제는 3을 2자리 왼쪽으로 시프트하여 4배로 만들어 12가 됩니다.
예시
li t0, 3 li t1, 2 sll t2, t0, t1 # t2 = 12
