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'
