blt

blt

Assembleur RISC-V Référence

lyszt.net couvre blt 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

blt compare deux valeurs et effectue un branchement lorsque la première est plus petite. beq et bne testent plutôt l'égalité. Le nom signifie « branch if less than » (brancher si inférieur à). La forme ci-dessous saute à la position étiquetée lorsque rs1 est inférieur à rs2, et passe sinon à l'instruction suivante.

blt rs1, rs2, label

La page beq explique les branchements, les étiquettes et le fonctionnement d'un saut.

La comparaison traite les deux valeurs comme signées, elles peuvent donc être négatives. -1 est inférieur à 0, et tout nombre négatif est inférieur à tout nombre positif. Les comparaisons non signées utilisent une instruction distincte, bltu, et les deux diffèrent pour toute valeur dont le bit de poids fort est à 1.

Les boucles de comptage reposent sur blt. La ligne ci-dessous se répète tant que le compteur t0 reste inférieur à sa limite t1.

blt t0, t1, loop

Une fois que le compteur atteint la limite, le branchement n'est pas pris et la boucle se termine. Les vérifications de limites utilisent la même instruction pour maintenir une valeur sous un maximum avant que le programme ne l'utilise.

Le manuel RISC-V spécifie que blt et bltu prennent le branchement lorsque rs1 est inférieur à rs2, en comparant respectivement en signé et en non signé. Il note également que bgt, bgtu, ble et bleu peuvent être synthétisés en inversant les opérandes de blt, bltu, bge et bgeu.

RISC-V ne fournit pas de branchement si supérieur. Pour tester si a est supérieur à b, inversez la comparaison et testez si b est inférieur à a. L'assembleur offre un raccourci bgt qui échange les opérandes pour vous.

Exemple

li t0, 2
li t1, 5
blt t0, t1, done   # 2 < 5, so jump to 'done'