bgezpseudo

bgez

pseudo
Assembleur RISC-V Référence

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

Description

bgez effectue un branchement lorsque la valeur dans un registre est zéro ou positive. Le nom signifie « brancher si supérieur ou égal à zéro ». La forme ci-dessous saute à la position étiquetée lorsque rs est au moins zéro, et passe à l'instruction suivante sinon.

bgez rs, label

L'assembleur la traite comme une pseudo-instruction et la réécrit en l'instruction ci-dessous, qui compare le registre à zero, le registre qui contient toujours 0.

bge rs, zero, label

La comparaison est signée, donc les 32 bits du registre sont lus comme un nombre qui peut être négatif. Zéro compte comme une correspondance, ce qui distingue bgez de bgtz. C'est l'opposé de bltz, donc pour toute valeur, exactement l'une des deux prend le branchement. Voir bge pour la comparaison de deux registres.

bgez est le test naturel pour une valeur qui ne doit pas être négative, comme une longueur, un compteur ou un indice. Un programme qui soustrait un à un compteur et continue à boucler tant que le compteur n'est pas descendu en dessous de zéro l'utilise à la fin de la boucle.

addi t0, t0, -1
bgez t0, loop

La boucle ci-dessus se répète tant que t0 est 0 ou plus après la soustraction, donc elle s'exécute une fois de plus avec t0 égal à 0 et s'arrête lorsque t0 atteint -1.

Se développe en

bge rs, zero, label

L'assembleur remplace cette pseudo-instruction par la ou les instructions réelles listées ci-dessus.

Exemple

li t0, 4
bgez t0, done   # t0 >= 0, so jump to 'done'