sll

sll

Asembler RISC-V Referencja

lyszt.net obejmuje sll i inne instrukcje RISC-V w większych szczegółach.

Format kodowania

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

Opis

sll przesuwa bity liczby w lewo. Rejestr przechowuje 32 bity w jednym rzędzie, a przesunięcie przenosi cały rząd w lewo lub w prawo o pewną liczbę pozycji. Nazwa oznacza shift left logical (przesunięcie logiczne w lewo). W poniższej formie wartość w rs1 jest przesuwana w lewo o liczbę miejsc podaną w rs2, a wynik trafia do rd.

sll rd, rs1, rs2

Gdy bity przesuwają się w lewo, zera wypełniają puste pozycje po prawej stronie, a bity wypchnięte poza lewą krawędź są odrzucane.

Przesunięcie w lewo o jedną pozycję podwaja liczbę, tak samo jak dopisanie 0 do liczby dziesiętnej mnoży ją przez dziesięć. Przesunięcie o 1 mnoży przez 2, przesunięcie o 2 mnoży przez 4, a przesunięcie o 3 mnoży przez 8. Przesunięcie kosztuje procesor mniej niż mnożenie, co czyni je szybką drogą do mnożenia przez potęgi dwójki. Dostęp do tablic opiera się na tym, ponieważ adres każdego elementu znajduje się o stałą liczbę bajtów będącą potęgą dwójki za poprzednim.

Zgodnie z podręcznikiem RISC-V, wielkość przesunięcia jest przechowywana w dolnych 5 bitach rejestru rs2. Pięć bitów obejmuje od 0 do 31 pozycji, więc pozostałe bity rs2 nie mają efektu. Podręcznik nazywa sll logicznym przesunięciem w lewo, co oznacza, że zera wchodzą do dolnych bitów.

W tej formie wielkość przesunięcia pochodzi z rejestru, co pasuje do wielkości obliczanej w trakcie działania programu. Użyj slli dla stałej wielkości. Przykład przesuwa 3 w lewo o 2 pozycje, mnożąc je przez 4, co daje 12.

Przykład

li t0, 3
li t1, 2
sll t2, t0, t1   # t2 = 12