remu

remu

Asembler RISC-V Referencja

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

remu oblicza resztę bez znaku, wartość pozostającą po dzieleniu bez znaku. Ma się do divu tak, jak rem do div. Litera u oznacza, że bity są traktowane jako liczby nieujemne, od 0 do około 4 miliardów. Strona divu opisuje, jak różnią się interpretacje ze znakiem i bez znaku tych samych bitów.

Wynik remu zawsze mieści się między 0 a dzielnikiem minus 1, więc nigdy nie jest ujemny i nie ma reguły znaku. Dzięki temu jest przydatny do zawijania pozycji w buforze cyklicznym, rozdzielania wartości skrótu na stałą liczbę slotów i cyklicznego przechodzenia przez powtarzającą się sekwencję.

Reszta z dzielenia przez zero zwraca pierwotną liczbę.

Zgodnie z podręcznikiem RISC-V przepełnienie dzielenia bez znaku nie może wystąpić, więc remu nie ma przypadku przepełnienia. Reszta z dzielenia przez zero jest równa dzielnej. Podręcznik zaleca uruchamianie divu i remu na tych samych operandach, gdy potrzebny jest zarówno iloraz, jak i reszta, aby procesor mógł je połączyć w jedno dzielenie.

Dla dzielnika będącego potęgą dwójki bitowe AND (andi) daje ten sam wynik taniej. Poniższa linia oblicza resztę z dzielenia przez 8, ponieważ reszta z dzielenia przez potęgę dwójki to najniższe bity wartości.

andi t0, t0, 7

Ten skrót dotyczy tylko potęg dwójki.

Przykład

li t0, -1
li t1, 10
remu t2, t0, t1   # t2 = 5 (t0 read as unsigned)