sltu
lyszt.net behandelt sltu und andere RISC-V-Befehle ausführlicher.
Kodierungsformat
Beschreibung
sltu setzt das Zielregister auf 1 oder 0 wie slt und vergleicht zwei Zahlen als vorzeichenlose Werte. Der Name steht für set less than, unsigned. Die Seite slt behandelt das Speichern eines Vergleichsergebnisses als 1 oder 0.
Dieselben 32 Bits können als vorzeichenbehaftete Zahl gelesen werden, wobei das höchste Bit negativ bedeutet und der Bereich etwa -2 Milliarden bis +2 Milliarden beträgt, oder als vorzeichenlose Zahl, ohne Negative und mit einem Bereich von 0 bis etwa 4 Milliarden. slt liest den vorzeichenbehafteten Wert und sltu den vorzeichenlosen. Ein Register, bei dem alle Bits auf 1 gesetzt sind, ist -1 für slt und der größtmögliche Wert für sltu, sodass die beiden Anweisungen bei identischen Eingaben unterschiedlicher Meinung sein können.
Verwenden Sie sltu für Größen, die nicht negativ sein können, wie Speicheradressen, Größen, Zähler und Positionen. Der Vergleich zweier Speicheradressen mit dem vorzeichenbehafteten slt liefert ein falsches Ergebnis, sobald eine Adresse groß genug ist, um ihr höchstes Bit zu setzen, da die vorzeichenbehaftete Lesart sie als negativ behandelt.
Das RISC-V-Handbuch beschreibt slt und sltu zusammen als die vorzeichenbehafteten und vorzeichenlosen Vergleiche, die 1 in rd schreiben, wenn rs1 kleiner als rs2 ist, und andernfalls 0. Es gibt die folgende Zeile als Möglichkeit an, auf Ungleich null zu testen, was die Pseudoanweisung snez ist.
sltu rd, x0, rs2
Die Form von sltu ist unten dargestellt.
sltu rd, rs1, rs2
Im folgenden Sonderfall wird rd zu 1, wann immer rs etwas anderes als null ist, da 0 kleiner als jeder andere vorzeichenlose Wert ist. Dies reduziert jede Zahl auf eine 1 oder eine 0.
sltu rd, zero, rs
Beispiel
li t0, -1 li t1, 1 sltu t2, t0, t1 # t2 = 0 (t0 read as unsigned is huge)
