bgezпсевдо

bgez

псевдо
Асемблер RISC-V Посилання

lyszt.net охоплює bgez та інші інструкції RISC-V більш детально.

Опис

bgez виконує перехід, коли значення в регістрі дорівнює нулю або додатне. Назва означає branch if greater than or equal to zero (перехід, якщо більше або дорівнює нулю). Наведена нижче форма виконує перехід до позначеної позиції, коли rs не менше нуля, а в іншому разі переходить до наступної інструкції.

bgez rs, label

Асемблер розглядає її як псевдоінструкцію та переписує в наведену нижче інструкцію, яка порівнює регістр із zero — регістром, який завжди містить 0.

bge rs, zero, label

Порівняння знакове, тому 32 біти в регістрі читаються як число, яке може бути від'ємним. Нуль вважається збігом, що відрізняє bgez від bgtz. Це протилежність до bltz, тому для будь-якого значення рівно одна з двох виконує перехід. Порівняння двох регістрів див. у bge.

bgez — природна перевірка для значення, яке не повинно бути від'ємним, наприклад довжини, лічильника чи індексу. Програма, яка віднімає одиницю від лічильника й продовжує цикл, поки лічильник не став меншим за нуль, використовує її в кінці циклу.

addi t0, t0, -1
bgez t0, loop

Наведений вище цикл повторюється, поки t0 після віднімання дорівнює 0 або більше, тому він виконується ще раз із t0, що дорівнює 0, і зупиняється, коли t0 досягає -1.

Розгортається до

bge rs, zero, label

Асемблер замінює цю псевдоінструкцію реальною інструкцією або інструкціями, переліченими вище.

Приклад

li t0, 4
bgez t0, done   # t0 >= 0, so jump to 'done'