ble伪

ble

伪
RISC-V 汇编 参考

lyszt.net 更详细地介绍了 ble 和其他 RISC-V 指令。

描述

ble 在一个值小于或等于另一个值时分支。该名称代表 branch if less than or equal。下面的形式在 rs1 至多为 rs2 时跳转到标签,使用有符号比较。

ble rs1, rs2, label

ble 是一条伪指令,依赖交换操作数,就像 bgt 一样。询问 a 是否小于或等于 b,等同于询问 b 是否大于或等于 a,因此汇编器会把 ble 重写为操作数相反的 bge。不需要专用的机器指令。底层分支请参见 bge。

ble 适合包含端点的循环和范围。一个在计数器至多为 n(包含 n)时运行的循环,用 ble 读起来很清楚。同一个循环若用严格的 blt,则需要 n 加一。范围检查会把它与其他分支一起使用。如果值低于最小值就分支离开,如果高于最大值就分支离开,剩下的就通过了。

RISC-V 手册指出,bgt、bgtu、ble 和 bleu 可以通过反转操作数合成为 blt、bltu、bge 和 bgeu。

相等的值会随 ble 分支,这使它成为相同操作数下 bgt 的反面。对于任何一对值,二者之一会分支。比较是有符号的,因此值可以为负。blt、bge、bgt 和 ble 合在一起给出了全部四种有符号顺序方向。

展开为

bge rs2, rs1, label

汇编器会将此伪指令替换为上面列出的真实指令或指令。

示例

li t0, 2
li t1, 5
ble t0, t1, done   # 2 <= 5, so jump to 'done'