bne
lyszt.net tratta bne e altre istruzioni RISC-V in modo più dettagliato.
Formato di codifica
Descrizione
bne significa branch if not equal (salta se diverso), ed è la controparte di beq. Confronta due registri e salta alla posizione etichettata quando differiscono. Quando coincidono, l'esecuzione prosegue con l'istruzione successiva. La forma è mostrata di seguito. Salti, etichette e salto su una condizione sono spiegati nella pagina di beq.
bne rs1, rs2, label
Insieme, beq e bne gestiscono ogni decisione di uguale e diverso. In assembly una condizione è spesso espressa in forma invertita. Per eseguire un blocco di codice solo quando due valori sono uguali, si salta attorno a quel blocco con bne. Il codice salta il blocco quando i valori differiscono e vi entra quando coincidono.
bne mantiene anche un ciclo in esecuzione finché una condizione è vera. Un ciclo che gira finché un valore raggiunge un obiettivo termina con un bne che salta di nuovo all'inizio. La lettura di testo segue questo schema, in cui il ciclo continua finché il carattere corrente non è il byte zero che segna la fine.
Il manuale RISC-V afferma che beq e bne effettuano il salto quando i registri rs1 e rs2 sono uguali o diversi. L'offset è un valore a 12 bit contato in multipli di 2 byte, quindi un salto raggiunge circa 4 KiB in entrambe le direzioni, dove un KiB è 1024 byte.
bnez è la forma abbreviata per il confronto con zero, che chiede se un valore è diverso da zero. Il confronto in bne, come in beq, è una semplice uguaglianza di bit, quindi le letture con segno e senza segno non hanno importanza.
Esempio
li t0, 1 li t1, 2 bne t0, t1, done # t0 != t1, so jump to 'done'
