bltz伪

bltz

伪
RISC-V 汇编 参考

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

描述

bltz 在寄存器保存负数时分支。这个名称的意思是 branch if less than zero(小于零则分支)。下面的形式在 rs 小于零时跳转到带标签的位置,否则继续执行下一条指令。

bltz rs, label

汇编器会把这条伪指令重写成一条真实指令。它变成下面的指令,将寄存器与 zero 寄存器比较,后者始终保存 0。

blt rs, zero, label

比较是有符号的,因此寄存器中的 32 位会被读作一个可以为负的数。分支比较两个寄存器,不能接受写在指令中的常量,这就是 0 来自 zero 寄存器的原因。关于比较两个值的分支,请参见 blt;关于标签如何工作,请参见 beq。

要检查一个值是否小于零,请把该值放入寄存器并对它使用 bltz。常见的情况是测试减法的结果是否低于零,以及测试以负数报告错误的函数结果。

sub t0, t1, t2
bltz t0, smaller

上面的行在减法结果低于零时跳转到 smaller。结果恰好为 0 不是负数,会继续执行下一条指令。同样接受零的反向分支是 bgez。

展开为

blt rs, zero, label

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

示例

li t0, -3
bltz t0, done   # t0 < 0, so jump to 'done'