srai
lyszt.net obejmuje srai i inne instrukcje RISC-V w większych szczegółach.
Format kodowania
Opis
srai przesuwa bity w prawo o stałą wartość i kopiuje bit znaku do zwolnionych górnych pozycji, co zachowuje liczby ujemne jako ujemne. Jest to forma o stałej wartości instrukcji sra, dlatego wypełnienie zachowuje znak. Litera i oznacza immediate (natychmiastowy), stałą zakodowaną w instrukcji.
Składnia srai znajduje się poniżej, gdzie amount to stała z zakresu od 0 do 31.
srai rd, rs1, amount
Przesunięcie w prawo o jedno miejsce zmniejsza liczbę o połowę i pozostawia znak bez zmian, więc srai dzieli liczbę ze znakiem przez potęgę dwójki. Następny wiersz dzieli wartość ze znakiem przez 8, zarówno dla danych dodatnich, jak i ujemnych.
srai t0, t0, 3
srai zaokrągla w dół, w stronę bardziej ujemnej wartości. Przesunięcie -7 w prawo o 1 daje -4, podczas gdy div z dzielnikiem 2 daje -3, ponieważ zaokrągla w stronę zera. Obie operacje są zgodne dla liczb nieujemnych i dla dzielenia bez reszty. Różnią się o jeden tylko wtedy, gdy liczba ujemna pozostawia resztę. Kod grafiki, dźwięku i sygnałów na ogół wymaga zaokrąglania w dół.
Podręcznik RISC-V koduje przesunięcia o stałej wartości jako specjalizację formatu typu I, jednego ze standardowych układów instrukcji. Wartość przesunięcia zajmuje dolne 5 bitów pola natychmiastowego, a bit 30 instrukcji rozróżnia dwa przesunięcia w prawo. srai wykonuje arytmetyczne przesunięcie w prawo, a pierwotny bit znaku wypełnia zwolnione górne bity.
Spośród czterech przesunięć srai obsługuje liczby ze znakiem, które są dzielone, a srli obsługuje surowe bity lub liczby, które nigdy nie stają się ujemne. Formy bez i, sra i srl, przyjmują odległość przesunięcia obliczaną w czasie działania programu.
Przykład
li t0, -8 srai t1, t0, 1 # t1 = -4 (sign-filled)
