beqz
疑似lyszt.netはbeqzおよびその他のRISC-V命令をより詳しく扱っています。
説明
beqz はレジスタがゼロのときに分岐します。この名前は「ゼロに等しければ分岐する」という意味です。以下の形式では、rs がゼロのときにプロセッサはラベル付きの位置へジャンプし、そうでなければ次の命令へ進みます。
beqz rs, label
beqz は擬似命令であり、アセンブラが実際の命令に書き換える読みやすい名前です。これは以下の命令になり、レジスタを常に 0 を保持する特殊なレジスタ zero と比較します。
beq rs, zero, label
beqz は最も一般的な比較をより短く書く方法を提供します。分岐とラベルの仕組みについては beq を参照してください。
ゼロは低水準コードで頻繁に現れるため、この省略記法が存在します。ゼロバイトはテキストの終わりを示します。ゼロは演算が成功したことを示す通常のシグナルです。ゼロはまた、空または欠落した値を表し、カウントダウンループはゼロで終了します。ゼロのテストは、文字を読み込んだ後に文字列の終わりを検出するため、返されたステータスで成功パスを取るため、そしてカウンタでループを終了するために使用されます。
RISC-V のマニュアルは、その分岐が 1 つのレジスタをゼロと比較するのではなく 2 つのレジスタを比較する理由を 1 つ挙げています。ゼロとの比較には無視できない回路遅延が必要なため、算術的な大小比較とほぼ同じコストがかかります。したがって beqz は zero を伴う beq を使う擬似命令です。
以下の最初の行は、ゼロとの比較を明示的に書いた 2 番目の行よりも読みやすくなっています。
beqz t0, done beq t0, zero, done
擬似命令は可読性のために存在し、それらが生成するマシンコードは同一です。その反対は bnez で、値がゼロでないときに分岐します。
展開先
beq rs, zero, label
アセンブラはこの疑似命令を、上記に示された実際の命令または複数の命令に置き換えます。
例
li t0, 0 beqz t0, done # t0 == 0, so jump to 'done'
