slli
lyszt.net obejmuje slli i inne instrukcje RISC-V w większych szczegółach.
Format kodowania
Opis
slli przesuwa bity w lewo o stałą wartość. Operacja odpowiada sll: bity przesuwają się w lewo, zera wypełniają prawą stronę, bity wychodzące za lewą krawędź są tracone, a każde przesunięte miejsce podwaja wartość (strona sll opisuje mechanikę). Instrukcja przechowuje odległość przesunięcia jako stałą, więc żaden rejestr jej nie dostarcza. Litera i oznacza immediate (natychmiastowy), co jest terminem na stałą zapisaną w instrukcji.
Postać slli przedstawiono poniżej, gdzie amount to stała liczba od 0 do 31.
slli rd, rs1, amount
Następna linia przesuwa t0 w lewo o 3 miejsca, co mnoży go przez 8.
slli t1, t0, 3
Tablice sprawiają, że ta instrukcja jest powszechna. Wartość 32-bitowa w tablicy zajmuje 4 bajty, więc element o numerze i znajduje się i razy 4 bajty od początku, a przesunięcie w lewo o 2 mnoży przez 4. Typowy wzorzec przesuwa indeks, aby uzyskać przesunięcie w bajtach, dodaje adres początkowy tablicy, a następnie ładuje wartość. Rozpoznawanie tej sekwencji przesunięcia, dodania i załadowania pomaga przy czytaniu asemblera napisanego przez innych.
Podręcznik RISC-V koduje przesunięcia o stałą jako specjalizację formatu typu I, jednego ze standardowych układów instrukcji. rs1 przechowuje operand do przesunięcia, a dolne 5 bitów pola immediate przechowuje wartość przesunięcia. slli wykonuje logiczne przesunięcie w lewo, a zera wchodzą do dolnych bitów.
Używaj slli, gdy odległość przesunięcia jest znana podczas pisania kodu. Używaj sll, gdy wartość jest obliczana podczas działania programu. Przykład przesuwa 5 w lewo o 3, co daje 5 razy 8, czyli 40.
Przykład
li t0, 5 slli t1, t0, 3 # t1 = 5 << 3 = 40 (5 * 8)
