rem
lyszt.net behandelt rem und andere RISC-V-Befehle ausführlicher.
Kodierungsformat
Beschreibung
rem gibt den Rest einer Division zurück, also den Betrag, der übrig bleibt. Teilt man 17 durch 5, so geht das 3-mal mit 2 als Rest. div liefert die 3 und rem liefert die 2. Der Name ist die Kurzform von remainder (Rest). Die Form ist unten dargestellt und bedeutet rd = der Rest von rs1 geteilt durch rs2.
rem rd, rs1, rs2
Sie gehört zur selben optionalen M-Mathematikerweiterung wie div.
Die beiden Anweisungen arbeiten mit demselben Zahlenpaar und ergeben zusammen den Quotienten und den Rest. rem ist die Assemblerform des %-Operators (Modulo) in höheren Programmiersprachen.
Bei negativen Zahlen nimmt der Rest das Vorzeichen der Zahl an, die geteilt wird. 7 Rest 2 ist 1, und -7 Rest 2 ist -1. Ein Test auf ungerade Zahlen, der prüft, ob der Rest durch 2 gleich 1 ist, liefert bei negativen Zahlen das falsche Ergebnis. Die Prüfung, ob der Rest null ist, entscheidet bei jedem Vorzeichen über gerade oder ungerade.
Das RISC-V-Handbuch sagt, dass rem den Rest der entsprechenden Division liefert und dass ein von null verschiedenes Ergebnis das Vorzeichen des Dividenden hat. Jede Division, die nicht überläuft, erfüllt Dividend = Divisor mal Quotient plus Rest. Ein Rest durch null ergibt den Dividenden, und der Fall des vorzeichenbehafteten Überlaufs, die negativste Zahl geteilt durch -1, ergibt einen Rest von null. Um den Quotienten und den Rest derselben Division zu erhalten, empfiehlt das Handbuch, div und dann rem auf dieselben Operanden anzuwenden, was ein Prozessor zu einer einzigen Division verschmelzen kann.
Reste werden verwendet, um einen Zähler an den Anfang eines Puffers zurückzusetzen, um Ziffern von einer Zahl abzunehmen und um Elemente über Slots zu verteilen. Ein Rest durch null gibt die ursprüngliche Zahl zurück. Das Beispiel berechnet 17 Rest 5 und hinterlässt 2 in t2.
Beispiel
li t0, 17 li t1, 5 rem t2, t0, t1 # t2 = 2
