bgez
疑似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'
