bgtz疑似

bgtz

疑似
RISC-V アセンブリ 参考

lyszt.netはbgtzおよびその他のRISC-V命令をより詳しく扱っています。

説明

bgtz は、レジスタの値が正の場合に分岐します。名前は branch if greater than zero を意味します。以下の形式は、rs がゼロより大きい場合にラベル位置へジャンプし、そうでなければ次の命令へフォールスルーします。

bgtz rs, label

アセンブラはこれを疑似命令として扱い、以下に示す命令へ書き換えます。これは zero がレジスタより小さいかどうかを問い合わせます。

blt zero, rs, label

RISC-V には greater than 用の分岐がないため、オペランドが交換され、less-than 分岐が処理を行います。これは bgt が構築されるのと同じ方法です。比較は符号付きです。ゼロは分岐しないため、これが bgtz と bgez を区別します。基になる分岐については blt を参照してください。

bgtz は、処理すべきものが残っている間継続すべきループ、たとえば残りの項目数がゼロより大きい場合に適しています。また、結果がゼロより大きいかどうかをテストします。

bgtz a0, found

上記の行は、a0 が 1 以上を保持する場合に found へジャンプします。値が 0 または任意の負の数の場合は、次の命令へ続きます。

展開先

blt zero, rs, label

アセンブラはこの疑似命令を、上記に示された実際の命令または複数の命令に置き換えます。

例

li t0, 4
bgtz t0, done   # t0 > 0, so jump to 'done'