bnez
pseudolyszt.net tratta bnez e altre istruzioni RISC-V in modo più dettagliato.
Descrizione
bnez salta quando un registro contiene un valore diverso da zero. Il nome significa branch if not equal to zero. La forma seguente salta all'etichetta quando rs è diverso da zero.
bnez rs, label
L'assembler espande questa pseudo-istruzione nell'istruzione seguente, che confronta con il registro che contiene sempre zero.
bne rs, zero, label
Per il test di zero vedi beqz, e per i salti in generale vedi beq.
beqz protegge frequentemente le uscite, mentre bnez mantiene frequentemente un ciclo in esecuzione. Finché restano caratteri da leggere, il ciclo continua a scorrere. Finché il contatore non è esaurito, continua. Una comune fine di ciclo breve decrementa un registro e cicla finché il valore è diverso da zero. Sottrae uno, poi salta indietro all'inizio con bnez.
bnez agisce anche su valori veri o falsi calcolati in precedenza. Istruzioni di impostazione come slt lasciano un 1 o 0 in un registro, e un bnez successivo salta in base a quel risultato. Un registro che contiene un valore sì o no può essere testato con bnez.
Il manuale RISC-V fornisce una ragione per cui i suoi salti confrontano due registri invece di confrontare un registro con zero. Un confronto con zero richiede un ritardo di circuito non banale, quindi costa quasi quanto un confronto di grandezza aritmetica. bnez è quindi una pseudo-istruzione che usa bne con zero.
Un altro uso frequente verifica i risultati. Quando una funzione restituisce 0 per il successo e diverso da zero per il fallimento, il chiamante segue la chiamata con la riga seguente per saltare alla gestione degli errori ogni volta che qualcosa è andato storto. Questa è la forma assembly di verificare un codice di ritorno.
bnez a0, error
Si espande in
bne rs, zero, label
L'assembler sostituisce questa pseudoistruzione con la o le istruzioni reali elencate sopra.
Esempio
li t0, 5 bnez t0, done # t0 != 0, so jump to 'done'
