slt

slt

Assembly RISC-V Riferimento

lyszt.net tratta slt 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

slt confronta due numeri e memorizza il risultato come 1 o 0. Il nome sta per set less than (imposta minore di). La forma seguente verifica se rs1 è minore di rs2. Se il test riesce, l'istruzione scrive 1 nel registro di destinazione rd. Se fallisce, scrive 0.

slt rd, rs1, rs2

Un confronto può essere usato in due modi. Un'istruzione di salto salta in base ad esso. In alternativa, la risposta sì o no può essere memorizzata come numero, 1 per vero e 0 per falso, e usata in seguito. slt esegue la memorizzazione. L'assembly rappresenta vero e falso con l'1 o lo 0 memorizzato, e quel valore può essere sommato, mascherato o combinato come qualsiasi altro numero.

Il confronto tratta i valori come con segno, quindi possono essere negativi, e -1 conta come minore di 0. L'istruzione correlata sltu li tratta come senza segno, il che cambia la risposta per valori grandi e per valori che sembrano negativi.

Il manuale RISC-V descrive slt e sltu come i confronti con segno e senza segno che scrivono 1 in rd se rs1 è minore di rs2 e 0 altrimenti. Usa inoltre slt in un controllo di overflow per l'addizione con segno generale. Dopo l'addizione, la seconda riga sotto registra se il secondo operando è negativo, la terza riga registra se la somma è minore del primo operando, e l'ultima riga salta quando le due risposte differiscono.

add t0, t1, t2
slti t3, t2, 0
slt t4, t0, t1
bne t3, t4, overflow

Il ragionamento è che la somma dovrebbe essere minore di un operando solo quando l'altro operando è negativo.

Non esiste un'istruzione set greater than (imposta maggiore di). Per verificare se a è maggiore di b, scambia gli operandi e chiedi se b è minore di a. L'esempio confronta 3 e 9. Poiché 3 è minore di 9, t2 viene impostato a 1.

Esempio

li t0, 3
li t1, 9
slt t2, t0, t1   # t2 = 1