bne
lyszt.net couvre bne et d'autres instructions RISC-V plus en détail.
Format d'encodage
Description
bne signifie branch if not equal (brancher si différent), et c'est l'équivalent inverse de beq. Il compare deux registres et saute à la position étiquetée lorsqu'ils diffèrent. Lorsqu'ils sont égaux, l'exécution se poursuit avec l'instruction suivante. La forme est présentée ci-dessous. Les branchements, les étiquettes et le saut conditionnel sont expliqués sur la page beq.
bne rs1, rs2, label
Ensemble, beq et bne couvrent toutes les décisions d'égalité et d'inégalité. En assembleur, une condition est souvent exprimée sous forme inversée. Pour exécuter un bloc de code uniquement lorsque deux valeurs sont égales, on saute autour de ce bloc avec bne. Le code saute le bloc lorsque les valeurs diffèrent et y entre lorsqu'elles sont égales.
bne permet aussi de maintenir une boucle tant qu'une condition est vraie. Une boucle qui s'exécute jusqu'à ce qu'une valeur atteigne une cible se termine par un bne qui saute en haut de la boucle. La lecture de texte suit ce schéma, où la boucle continue tant que le caractère courant n'est pas l'octet nul qui marque la fin.
Le manuel RISC-V indique que beq et bne prennent le branchement lorsque les registres rs1 et rs2 sont égaux ou inégaux. Le décalage est une valeur de 12 bits comptée en multiples de 2 octets, de sorte qu'un branchement atteint environ 4 Kio dans chaque direction, où un Kio vaut 1024 octets.
bnez est la forme abrégée pour la comparaison avec zéro, qui demande si une valeur est non nulle. La comparaison dans bne, comme dans beq, est une simple égalité de bits, donc les interprétations signée et non signée n'ont pas d'importance.
Exemple
li t0, 1 li t1, 2 bne t0, t1, done # t0 != t1, so jump to 'done'
