srl

srl

Asembler RISC-V Referencja

lyszt.net obejmuje srl 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

srl przesuwa bity w prawo, odwrotnie niż robi to sll. Litery oznaczają shift right logical (przesunięcie logiczne w prawo). Ta forma pobiera bity z rs1, przesuwa je w prawo o liczbę z rs2 i zapisuje wynik w rd.

srl rd, rs1, rs2

Wszelkie bity wypchnięte poza prawy koniec są tracone, a zera wypełniają zwolnione miejsca po lewej stronie.

To wypełnienie zerami wyjaśnia słowo logical. Przesunięcie w prawo zmniejsza wartość o połowę, więc przesunięcie o 1 dzieli przez 2, a przesunięcie o 3 dzieli przez 8. Reszta jest odrzucana, zgodnie z dzieleniem całkowitym. srl szybko dzieli liczbę bez znaku przez potęgę dwójki.

Istnieją dwie instrukcje przesunięcia w prawo, a różnica polega na tym, co trafia do opróżnionych wysokich bitów. srl umieszcza tam zera. Jej odpowiednik sra kopiuje bit znaku na te pozycje, co zachowuje znak liczb ujemnych. Wybierz srl dla surowego wzorca bitów lub wartości, która nie może być ujemna. W przypadku wartości ze znakiem, która może być ujemna, srl daje dużą liczbę dodatnią, a sra jest w tym przypadku właściwą instrukcją.

Zgodnie z podręcznikiem RISC-V liczba przesunięć zajmuje dolne 5 bitów rejestru rs2. Te 5 bitów obejmuje zakres od 0 do 31 pozycji, więc pozostałe bity rs2 są ignorowane. Podręcznik nazywa srl logicznym przesunięciem w prawo, które wstawia zera na górze.

Gdy liczba przesunięć jest stałą, użyj formy natychmiastowej srli.

Przykład

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