slt
lyszt.net behandelt slt und andere RISC-V-Befehle ausführlicher.
Kodierungsformat
Beschreibung
slt vergleicht zwei Zahlen und speichert das Ergebnis als 1 oder 0. Der Name steht für set less than (setze kleiner als). Die folgende Form prüft, ob rs1 kleiner als rs2 ist. Wenn der Test erfolgreich ist, schreibt die Anweisung 1 in das Zielregister rd. Wenn er fehlschlägt, schreibt sie 0.
slt rd, rs1, rs2
Ein Vergleich kann auf zwei Arten verwendet werden. Eine Sprunganweisung springt aufgrund des Ergebnisses. Alternativ kann die Ja-oder-Nein-Antwort als Zahl gespeichert werden, 1 für wahr und 0 für falsch, und später verwendet werden. slt übernimmt das Speichern. Assembly stellt wahr und falsch durch die gespeicherte 1 oder 0 dar, und dieser Wert kann wie jede andere Zahl addiert, maskiert oder kombiniert werden.
Der Vergleich behandelt die Werte als vorzeichenbehaftet, sie können also negativ sein, und -1 zählt als kleiner als 0. Die verwandte Anweisung sltu behandelt sie als vorzeichenlos, was die Antwort für große Werte und für Werte, die negativ erscheinen, ändert.
Das RISC-V-Handbuch beschreibt slt und sltu als die vorzeichenbehafteten und vorzeichenlosen Vergleiche, die 1 in rd schreiben, wenn rs1 kleiner als rs2 ist, und sonst 0. Es verwendet slt außerdem in einer Überlaufprüfung für die allgemeine vorzeichenbehaftete Addition. Nach der Addition zeichnet die zweite Zeile unten auf, ob der zweite Operand negativ ist, die dritte Zeile zeichnet auf, ob die Summe kleiner als der erste Operand ist, und die letzte Zeile springt, wenn die beiden Antworten sich unterscheiden.
add t0, t1, t2 slti t3, t2, 0 slt t4, t0, t1 bne t3, t4, overflow
Die Begründung ist, dass die Summe nur dann kleiner als ein Operand sein sollte, wenn der andere Operand negativ ist.
Es gibt keine set-greater-than-Anweisung. Um zu prüfen, ob a größer als b ist, vertausche die Operanden und frage, ob b kleiner als a ist. Das Beispiel vergleicht 3 und 9. Da 3 kleiner als 9 ist, wird t2 auf 1 gesetzt.
Beispiel
li t0, 3 li t1, 9 slt t2, t0, t1 # t2 = 1
Referenzen
- [1]RISC-V International. The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture. Version 20260120. Section 2.4.2, Integer Register-Register Instructions, page 29.
- [2]RISC-V International. The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture. Version 20260120. Section 2.4, Integer Computational Instructions, page 27.
