seqz伪

seqz

伪
RISC-V 汇编 参考

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

描述

seqz 测试一个寄存器是否保存零。这个名字的意思是“set if equal to zero(若等于零则设置)”。当源寄存器 rs 为零时,下面的形式会把 1 写入目标寄存器 rd,而当 rs 保存任何其他值时写入 0。

seqz rd, rs

输出是 1 或 0,回答该值是否为零。

seqz 是一条伪指令:一个可读的名称,汇编器会把它重写成真正的指令。结果就是下面的指令,它询问该值是否小于 1。

sltiu rd, rs, 1

在无符号数中,0 是唯一小于 1 的值。你写 seqz,汇编器执行转换。

没有 RISC-V 指令询问两个值是否相等,因此 seqz 被用来构建相等性测试。对两个值进行 XOR,当它们匹配时得到零,当它们不同时得到非零结果,然后对该结果应用 seqz。1 表示原来的值相等。xor 页面解释了为什么 XOR 能检测相同性。

RISC-V 手册将 seqz 定义为带常量 1 的 sltiu 的汇编器伪指令,如果 rs1 等于零则将 rd 设为 1,否则设为 0。

seqz 还会反转真值或假值的含义。保存 0 的寄存器变为 1,任何非零值变为 0。答案是一个普通数字,因此可以供进一步的算术使用,例如用它相乘,以便在某个条件下将值清零。它的对应物是 snez,用于测试非零。

展开为

sltiu rd, rs, 1

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

示例

li t0, 0
seqz t1, t0       # t1 = 1