slti

slti

RISC-V Assembler Referenz

lyszt.net behandelt slti und andere RISC-V-Befehle ausführlicher.

Kodierungsformat

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

Beschreibung

slti vergleicht ein Register mit einer Konstante und schreibt 1 oder 0 in das Ziel. Es ist slt, das zwei Register vergleicht und das Ergebnis als Zahl speichert (siehe diese Seite), wobei der zweite Wert als Immediate angegeben wird. Ein Immediate ist eine in der Anweisung kodierte Konstante, und das i im Namen kennzeichnet dies.

Die Form von slti ist unten dargestellt. Wenn der Wert in rs1 kleiner als die Konstante imm ist, erhält rd 1, andernfalls 0.

slti rd, rs1, imm

Der Vergleich ist vorzeichenbehaftet, sodass das Register und die Konstante beide als Zahlen gelesen werden, die negativ sein können.

Verwenden Sie es, um eine Variable mit einem im Voraus bekannten festen Schwellenwert zu vergleichen. Zu prüfen, ob ein Index unter 10 liegt oder ob ein Wert unter eine Grenze gefallen ist, erfordert ein einziges slti. Die nächste Zeile fragt, ob t0 kleiner als null ist, was auf einen negativen Wert prüft und t1 auf 1 für negative Werte und andernfalls auf 0 setzt.

slti t1, t0, 0

Das RISC-V-Handbuch besagt, dass slti 1 in rd setzt, wenn rs1 kleiner als das vorzeichenerweiterte Immediate ist, wenn beide als vorzeichenbehaftete Zahlen behandelt werden, und andernfalls 0. Die Überlaufprüfung für die allgemeine vorzeichenbehaftete Addition verwendet es, wie auf der slt-Seite gezeigt, um festzuhalten, ob ein Operand negativ ist.

Die Konstante reicht von -2048 bis 2047. Um mit einem größeren Wert zu vergleichen, laden Sie die Konstante mit li in ein Register und verwenden Sie slt. Der Assembler lehnt eine Konstante außerhalb des Bereichs mit einer Fehlermeldung ab.

Beispiel

li t0, 3
slti t1, t0, 5   # t1 = 1 (3 < 5)