たとえば、ラベルがどこにある j ラベルが与えられた場合、0x004000b0
どのように機械語に変換しますか?
オペコードx02
とターゲット アドレスは 26 ビットです。シミュレートしてマシンコードを取得しようとしましたが0810002c
、手で計算することはできません。
MIPS命令リファレンスから、129ページ:
これは PC 領域ブランチです (PC 相対ではありません)。有効なターゲット アドレスは、「現在の」256 MB にアラインされた領域にあります。ターゲット アドレスの下位 28 ビットは、左に 2 ビット シフトされた instr_index フィールドです。残りの上位ビットは、遅延スロット内の命令のアドレスの対応するビットです (分岐自体ではありません)。
したがって、0x4000B0 にジャンプする場合は、2 ビット右にシフトして 0x10002C を取得します。これはジャンプ命令の下位 26 ビットを形成し、上位 6 ビットは 0b000010 であり、全体のオペコードは 0x810002C になります。