sltu

sltu

Assembly RISC-V Riferimento

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

sltu imposta il registro di destinazione a 1 o 0 come slt, e confronta due numeri come valori senza segno. Il nome sta per set less than, unsigned. La pagina slt tratta la memorizzazione di un risultato di confronto come 1 o 0.

Gli stessi 32 bit possono essere letti come un numero con segno, con il bit più alto che significa negativo e un intervallo di circa -2 miliardi a +2 miliardi, oppure come un numero senza segno, senza negativi e con un intervallo da 0 a circa 4 miliardi. slt legge il valore con segno e sltu legge quello senza segno. Un registro con tutti i bit impostati a 1 è -1 per slt e il valore più grande possibile per sltu, quindi le due istruzioni possono essere in disaccordo su input identici.

Usa sltu per quantità che non possono essere negative, come indirizzi di memoria, dimensioni, conteggi e posizioni. Confrontare due indirizzi di memoria con il slt con segno dà un risultato errato quando un indirizzo è abbastanza grande da impostare il suo bit più alto, poiché la lettura con segno lo tratta come negativo.

Il manuale RISC-V descrive slt e sltu insieme come i confronti con e senza segno che scrivono 1 in rd se rs1 è minore di rs2 e 0 altrimenti. Fornisce la riga seguente come modo per verificare il non-zero, che è la pseudo-istruzione snez.

sltu rd, x0, rs2

La forma di sltu è mostrata di seguito.

sltu rd, rs1, rs2

Nel caso speciale seguente, rd diventa 1 ogni volta che rs è diverso da zero, poiché 0 è minore di ogni altro valore senza segno. Questo riduce qualsiasi numero a 1 o 0.

sltu rd, zero, rs

Esempio

li t0, -1
li t1, 1
sltu t2, t0, t1   # t2 = 0 (t0 read as unsigned is huge)