bne
lyszt.net obejmuje bne i inne instrukcje RISC-V w większych szczegółach.
Format kodowania
Opis
bne oznacza branch if not equal (skok, jeśli nie są równe) i jest odpowiednikiem beq. Porównuje dwa rejestry i skacze do oznaczonej pozycji, gdy się różnią. Gdy są równe, wykonanie przechodzi do następnej instrukcji. Postać pokazano poniżej. Skoki, etykiety i skakanie po warunku wyjaśniono na stronie beq.
bne rs1, rs2, label
Razem beq i bne obsługują każdą decyzję o równości i nierówności. Asembler często podaje warunek w odwróconej formie. Aby wykonać blok kodu tylko wtedy, gdy dwie wartości są równe, przeskocz wokół tego bloku za pomocą bne. Kod pomija blok, gdy wartości się różnią, a wchodzi do niego, gdy są równe.
bne podtrzymuje też pętlę, dopóki warunek jest spełniony. Pętla, która działa, aż wartość osiągnie cel, kończy się bne, które skacze z powrotem na początek. Czytanie tekstu przebiega według tego wzorca, gdzie pętla trwa, dopóki bieżący znak nie jest bajtem zerowym oznaczającym koniec.
Podręcznik RISC-V mówi, że beq i bne wykonują skok, gdy rejestry rs1 i rs2 są równe lub nierówne. Przesunięcie to wartość 12-bitowa liczona w wielokrotnościach 2 bajtów, więc skok sięga około 4 KiB w każdym kierunku, gdzie KiB to 1024 bajty.
bnez to skrót oznaczający porównanie z zerem, które pyta, czy wartość nie jest zerem. Porównanie w bne, podobnie jak w beq, to zwykła równość bitów, więc interpretacja ze znakiem i bez znaku nie ma znaczenia.
Przykład
li t0, 1 li t1, 2 bne t0, t1, done # t0 != t1, so jump to 'done'
