slti

slti

Asembler RISC-V Referencja

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

slti porównuje rejestr ze stałą i zapisuje 1 lub 0 do miejsca docelowego. Jest to slt, które porównuje dwa rejestry i zapisuje wynik jako liczbę (zobacz tę stronę), z drugą wartością podaną jako wartość natychmiastowa. Wartość natychmiastowa to stała zakodowana w instrukcji, a litera i w nazwie to oznacza.

Postać slti pokazano poniżej. Gdy wartość w rs1 jest mniejsza niż stała imm, rd otrzymuje 1, a w przeciwnym razie 0.

slti rd, rs1, imm

Porównanie jest ze znakiem, więc zarówno rejestr, jak i stała są odczytywane jako liczby, które mogą być ujemne.

Użyj jej, aby porównać zmienną ze stałym progiem znanym z góry. Sprawdzenie, czy indeks jest mniejszy niż 10 lub czy wartość spadła poniżej limitu, wymaga jednego slti. Następny wiersz pyta, czy t0 jest mniejsze niż zero, co sprawdza wartość ujemną i ustawia t1 na 1 dla wartości ujemnych oraz na 0 w przeciwnym razie.

slti t1, t0, 0

Podręcznik RISC-V mówi, że slti umieszcza 1 w rd, jeśli rs1 jest mniejsze niż rozszerzona znakowo wartość natychmiastowa, gdy oba są traktowane jako liczby ze znakiem, a 0 w przeciwnym razie. Sprawdzenie przepełnienia dla ogólnego dodawania ze znakiem używa jej, jak pokazano na stronie slt, aby zapisać, czy operand jest ujemny.

Stała mieści się w zakresie od -2048 do 2047. Aby porównać z większą wartością, załaduj stałą do rejestru za pomocą li i użyj slt. Asembler odrzuca stałą spoza zakresu z komunikatem o błędzie.

Przykład

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