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'
