beqzпсевдо

beqz

псевдо
RISC-V Ассемблер Ссылка

lyszt.net охватывает beqz и другие инструкции RISC-V более подробно.

Описание

beqz выполняет переход, когда регистр содержит ноль. Название означает branch if equal to zero (переход, если равно нулю). В приведённой ниже форме процессор переходит к помеченной позиции, когда rs равен нулю, а в противном случае продолжает к следующей инструкции.

beqz rs, label

beqz — это псевдоинструкция, читаемое имя, которое ассемблер переписывает в реальную инструкцию. Она превращается в инструкцию ниже, которая сравнивает регистр с zero, специальным регистром, который всегда содержит 0.

beq rs, zero, label

beqz даёт более короткий способ записи самого распространённого сравнения. См. beq, чтобы узнать, как работают ветвления и метки.

Ноль часто встречается в низкоуровневом коде, поэтому и существует это сокращение. Нулевой байт отмечает конец текста. Ноль — обычный сигнал того, что операция завершилась успешно. Ноль также представляет пустое или отсутствующее значение, а циклы обратного отсчёта завершаются на нуле. Проверка на ноль используется после загрузки символа для обнаружения конца строки, на возвращённом статусе для выбора пути успеха и на счётчике для завершения цикла.

Руководство RISC-V приводит одну причину, по которой его ветвления сравнивают два регистра, а не сравнивают один регистр с нулём. Сравнения с нулём требуют нетривиальной задержки схемы, поэтому они почти так же дороги, как сравнения арифметических величин. Поэтому beqz — это псевдоинструкция, использующая beq с zero.

Первая строка ниже читается яснее, чем вторая, которая явно записывает сравнение с нулём.

beqz t0, done
beq t0, zero, done

Псевдоинструкции существуют для читаемости, и машинный код, который они создают, идентичен. Её противоположность — bnez, которая выполняет переход, когда значение не равно нулю.

Разворачивается в

beq rs, zero, label

Ассемблер заменяет эту псевдоинструкцию реальной инструкцией или инструкциями, перечисленными выше.

Пример

li t0, 0
beqz t0, done   # t0 == 0, so jump to 'done'