slti

slti

Assembleur RISC-V Référence

lyszt.net couvre slti et d'autres instructions RISC-V plus en détail.

Format d'encodage

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

Description

slti compare un registre à une constante et écrit 1 ou 0 dans la destination. C'est slt, qui compare deux registres et stocke le résultat sous forme de nombre (voir cette page), avec la seconde valeur fournie comme immédiat. Un immédiat est une constante encodée dans l'instruction, et le i dans le nom le marque.

La forme de slti est présentée ci-dessous. Lorsque la valeur dans rs1 est inférieure à la constante imm, rd reçoit 1, et 0 sinon.

slti rd, rs1, imm

La comparaison est signée, donc le registre et la constante sont tous deux lus comme des nombres pouvant être négatifs.

Utilisez-le pour comparer une variable à un seuil fixe connu à l'avance. Vérifier si un indice est inférieur à 10 ou si une valeur est tombée sous une limite prend un seul slti. La ligne suivante demande si t0 est inférieur à zéro, ce qui teste une valeur négative et met t1 à 1 pour les valeurs négatives et à 0 sinon.

slti t1, t0, 0

Le manuel RISC-V indique que slti place 1 dans rd si rs1 est inférieur à l'immédiat étendu en signe lorsque les deux sont traités comme des nombres signés, et 0 sinon. La vérification de débordement pour l'addition signée générale l'utilise, comme montré sur la page slt, pour enregistrer si un opérande est négatif.

La constante va de -2048 à 2047. Pour comparer avec une valeur plus grande, chargez la constante dans un registre avec li et utilisez slt. L'assembleur rejette une constante hors plage avec un message d'erreur.

Exemple

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