divu
lyszt.net obejmuje divu i inne instrukcje RISC-V w większych szczegółach.
Format kodowania
Opis
divu wykonuje dzielenie bez znaku. 32 bity rejestru można interpretować na dwa sposoby. W odczycie ze znakiem najstarszy bit sygnalizuje liczbę ujemną, więc bity reprezentują wartości od około -2 miliardów do +2 miliardów. W odczycie bez znaku nie ma wartości ujemnych, a bity liczą od 0 do około 4 miliardów. Bity się nie zmieniają. Zmienia się tylko interpretacja.
div traktuje swoje dane wejściowe jako ze znakiem, natomiast divu traktuje je jako bez znaku. W pobliżu górnej granicy zakresu oba dają różne wyniki. Rejestr z wszystkimi bitami ustawionymi na 1 to -1 dla div i 4 294 967 295 dla divu.
divu nadaje się do wartości, które nie mogą być ujemne: pozycji w tablicy, rozmiarów w bajtach, liczników pętli, współrzędnych pikseli. Gdy jedna z tych wartości przekroczy około 2 miliardy, div ze znakiem zwraca błędne wyniki. Najstarszy bit się włącza, a odczyt ze znakiem czyni wartość ujemną.
Podręcznik RISC-V definiuje iloraz dzielenia bez znaku przez zero jako wszystkie bity ustawione, a resztę jako równą dzielnej. Według podręcznika przepełnienie dzielenia bez znaku nie może wystąpić. Wszystkie bity ustawione to największa liczba bez znaku, a proste układy dzielenia bez znaku same ją wytwarzają. Dlatego podręcznik ją wybrał.
Dzielenie przez zero zwraca największą wartość bez znaku, z wszystkimi bitami ustawionymi. Jeśli dzielnik jest potęgą dwójki, logiczne przesunięcie w prawo (srli) dzieli szybciej. Przesunięcie w prawo o 3 dzieli liczbę bez znaku przez 8.
Przykład
li t0, -2 li t1, 2 divu t2, t0, t1 # t2 = 2147483647 (t0 read as unsigned)
