bgez
псевдо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'
