bgez疑似

bgez

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

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

説明

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

bgez rs, label

アセンブラはこれを疑似命令として扱い、以下に示す命令へ書き換えます。これはレジスタを、常に 0 を保持するレジスタである zero と比較します。

bge rs, zero, label

比較は符号付きであるため、レジスタ内の 32 ビットは負になり得る数値として読み取られます。ゼロは一致と見なされ、これが bgez を bgtz と区別します。これは bltz の逆であるため、任意の値に対して、2 つのうちちょうど一方が分岐します。2 つのレジスタの比較については bge を参照してください。

bgez は、長さ、カウント、インデックスなど、負であってはならない値に対する自然なテストです。カウンタから 1 を引き、カウンタがゼロ未満にならない限りループし続けるプログラムは、ループの終わりでこれを使用します。

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'