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'