たとえば add では、レジスタと即値を追加するための addi がありますが、この場合、bnei や beqi を使用できないのはなぜですか...
私はそれに答えるはずですが、よくわかりません...何か助けはありますか?
その理由は、命令のエンコードです。
ADDI
とはどちらBNE/BEQ
もI タイプの命令です。ただし、命令の即値フィールドはADDI
、加算の即値オペランドを格納するために使用されますが、 の場合は分岐オフセットを格納するために使用されBEQ/BNE
ます。
条件付き分岐命令で即値オペランドを使用できる MIPS アセンブラがあるかもしれませんが、それらはそれらの疑似命令を複数の実際の命令に展開します。
フラグを使用するアーキテクチャでは、分岐命令は通常、レジスタと即値を比較して適切なフラグを設定できる比較命令の後に続きます (CMP と呼ばれることが多いですが、他の命令もフラグを設定できることがよくあります)。その後、ブランチはフラグのみをチェックします。
(これは、フラグを使用しない MIPS に質問が明確化される前に投稿されました)
ジャンプ先のアドレスとして 16 ビットの即値を使用したくない場合は、ジャンプできる場所が制限されるためです。MIPS のアドレスは 32 ビットです。16 ビットしか使用しない場合、可能なアドレスのごく一部しか使用していません。