bne
lyszt.net охоплює bne та інші інструкції RISC-V більш детально.
Формат кодування
Опис
bne означає branch if not equal (перехід, якщо не дорівнює) і є відповідником beq. Він порівнює два регістри й переходить до позначеної позиції, коли вони різняться. Коли вони збігаються, виконання продовжується з наступною інструкцією. Форму показано нижче. Переходи, мітки та перехід за умовою пояснюються на сторінці beq.
bne rs1, rs2, label
Разом beq і bne охоплюють кожне рішення про рівність і нерівність. Асемблер часто формулює умову в інвертованій формі. Щоб виконати блок коду лише тоді, коли два значення рівні, обійдіть цей блок за допомогою bne. Код пропускає блок, коли значення різняться, і входить у нього, коли вони збігаються.
bne також підтримує цикл, поки умова виконується. Цикл, який виконується доти, доки значення не досягне цілі, завершується bne, що переходить назад до початку. Читання тексту дотримується цього шаблону, де цикл триває, поки поточний символ не є нульовим байтом, що позначає кінець.
Посібник RISC-V каже, що beq і bne виконують перехід, коли регістри rs1 і rs2 рівні або нерівні. Зсув — це 12-бітне значення, яке відраховується кратними 2 байтами, тому перехід сягає приблизно 4 KiB в будь-якому напрямку, де KiB — це 1024 байти.
bnez — це скорочення для порівняння з нулем, яке запитує, чи значення не дорівнює нулю. Порівняння в bne, як і в beq, — це звичайна рівність бітів, тому знакова та беззнакова інтерпретації не мають значення.
Приклад
li t0, 1 li t1, 2 bne t0, t1, done # t0 != t1, so jump to 'done'
