rem
lyszt.net obejmuje rem i inne instrukcje RISC-V w większych szczegółach.
Format kodowania
Opis
Funkcja rem zwraca resztę z dzielenia, czyli pozostałą część. Dzielenie liczby 17 przez 5 daje 3 części i resztę równą 2. Instrukcja div zwraca wartość 3, a rem – 2. Nazwa ta jest skrótem od słowa „remainder” (reszta). Poniżej przedstawiono jej postać, która oznacza, że rd = reszta z dzielenia rs1 przez rs2.
rem rd, rs1, rs2
Należy do tego samego opcjonalnego rozszerzenia matematycznego języka M, co div.
Obie instrukcje działają na tej samej parze liczb i razem zwracają iloraz oraz resztę. rem jest asemblerową formą operatora % (modulo) występującego w językach wyższego poziomu.
W przypadku liczb ujemnych reszta przyjmuje znak dzielonej liczby. Reszta z dzielenia 7 przez 2 wynosi 1, a reszta z dzielenia -7 przez 2 wynosi -1. Test na liczby nieparzyste, sprawdzający, czy reszta z dzielenia przez 2 wynosi 1, daje błędny wynik w przypadku liczb ujemnych. Sprawdzenie, czy reszta wynosi zero, pozwala określić, czy liczba jest parzysta czy nieparzysta, niezależnie od jej znaku.
Podręcznik RISC-V podaje, że rem zwraca resztę z odpowiedniego dzielenia oraz że wynik niezerowy ma znak dzielonego. Każde dzielenie, które nie powoduje przepełnienia, spełnia równanie: dzielony = dzielnik pomnożony przez iloraz plus reszta. Reszta z dzielenia przez zero jest równa dzielnej, a w przypadku przepełnienia ze znakiem, gdy najujemniejsza liczba jest dzielona przez -1, reszta wynosi zero. Aby uzyskać iloraz i resztę z tego samego dzielenia, podręcznik zaleca użycie funkcji div, a następnie rem na tych samych operandach, co procesor może połączyć w jedno dzielenie.
Reszty są wykorzystywane do zawracania licznika do początku bufora, do usuwania cyfr z liczby oraz do rozdzielania elementów między komórki. Reszta z dzielenia przez zero zwraca pierwotną liczbę. W przykładzie obliczono 17 z resztą 5 i pozostawiono 2 w t2.
Przykład
li t0, 17 li t1, 5 rem t2, t0, t1 # t2 = 2
