sra
lyszt.net obejmuje sra i inne instrukcje RISC-V w większych szczegółach.
Format kodowania
Opis
sra to drugie przesunięcie w prawo, obok srl. Nazwa oznacza przesunięcie arytmetyczne w prawo. Poniższa forma przesuwa rs1 w prawo o wartość zawartą w rs2.
sra rd, rs1, rs2
Jak każde przesunięcie w prawo, przenosi bity w stronę młodszych pozycji i odrzuca te, które wypadną. Sposób traktowania pustych górnych pozycji różni się od srl.
RISC-V używa schematu ze znakiem, w którym najstarszy bit oznacza znak, a 1 na tej pozycji oznacza liczbę ujemną. srl wypełnia górę zerami, co usuwa znacznik znaku i zamienia liczbę ujemną w dużą dodatnią. sra wypełnia górę kopiami istniejącego bitu znaku, więc wypełnienie to 1 dla liczby ujemnej i 0 dla dodatniej. Liczba zachowuje swój znak.
sra dzieli liczbę ze znakiem przez potęgę dwójki. Przesunięcie o 1 zmniejsza ją o połowę, przesunięcie o 3 dzieli ją przez 8, a liczby ujemne pozostają ujemne. Wynik zaokrągla w dół, w stronę bardziej ujemnej wartości, więc -7 przesunięte w prawo o 1 daje -4, podczas gdy instrukcja div daje -3. Kod grafiki i dźwięku zwykle akceptuje zaokrąglanie w dół.
Podręcznik RISC-V przechowuje wielkość przesunięcia 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 opisuje sra jako arytmetyczne przesunięcie w prawo, które kopiuje oryginalny bit znaku do zwolnionych górnych bitów.
Używaj sra dla liczb ze znakiem, a srl dla surowych wzorców bitowych lub liczb, które nigdy nie są ujemne. Dla stałej wartości użyj formy stałej srai.
Przykład
li t0, -8 li t1, 1 sra t2, t0, t1 # t2 = -4 (sign-filled)
