slti

slti

Assembly RISC-V Riferimento

lyszt.net tratta slti e altre istruzioni RISC-V in modo più dettagliato.

Formato di codifica

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

Descrizione

slti confronta un registro con una costante e scrive 1 o 0 nella destinazione. È slt, che confronta due registri e memorizza il risultato come numero (vedi quella pagina), con il secondo valore fornito come immediato. Un immediato è una costante codificata nell'istruzione, e la i nel nome lo indica.

La forma di slti è mostrata di seguito. Quando il valore in rs1 è minore della costante imm, rd riceve 1, e 0 altrimenti.

slti rd, rs1, imm

Il confronto è con segno, quindi il registro e la costante sono entrambi letti come numeri che possono essere negativi.

Usalo per confrontare una variabile con una soglia fissa nota in anticipo. Verificare se un indice è inferiore a 10 o se un valore è sceso sotto un limite richiede un solo slti. La riga successiva chiede se t0 è minore di zero, il che verifica un valore negativo e imposta t1 a 1 per i valori negativi e a 0 altrimenti.

slti t1, t0, 0

Il manuale RISC-V afferma che slti inserisce 1 in rd se rs1 è minore dell'immediato esteso in segno quando entrambi sono trattati come numeri con segno, e 0 altrimenti. Il controllo di overflow per l'addizione con segno generale lo utilizza, come mostrato nella pagina slt, per registrare se un operando è negativo.

La costante va da -2048 a 2047. Per confrontare con un valore più grande, caricare la costante in un registro con li e usare slt. L'assembler rifiuta una costante fuori intervallo con un messaggio di errore.

Esempio

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