2

私は次の質問に少し行き詰まっています、

次の MIPS コードを考えて、続く質問に答えてください。

addi $t1, $s0, 400
loop: lw $s1, 0($s0)
add $s2, $s2, $s1
lw $s1, 4($s0)
add $s2, $s2, $s1
addi $s0, $s0, 8
bne $t1, $s0, loop

条件分岐命令でラベルループが変換される値は?

これで、Branch Target Address の数式がわかりました。しかし、ここではメモリアドレッシングが行われていないため、ターゲットアドレスとPCの間の行を数えることでオフセットを見つけました。これにより、答えは 7 (ワード オフセット) になります。私はこのアプローチで正しいですか?

4

2 に答える 2

2

私の知る限り、そうではありません。

MIPS命令リファレンスが言うように:

18 ビットの符号付きオフセット (左に 2 ビット シフトされた 16 ビットのオフセット フィールド) が、PC 相対有効ターゲットを形成するために、分岐遅延スロット内の分岐 (分岐自体ではない) に続く命令のアドレスに追加されます。住所。

私が理解しているように、分岐命令からloopラベルまでの距離は負です(ラベルが分岐の前にあるため、アドレスは低くなります)。距離は単語数で計算されます (したがって、2 ビット左シフト)。すべての MIPS 命令は 4 バイトであるため、これは 6 命令前になるため、-6 が分岐命令オフセット (下位ハーフワード) に表示される値になります。バイナリ: 1111 1111 1111 1010 (2 の補数)。16 進数: FFFA。

シミュレーターで確認したところ、命令が 0x1530FFFA としてコーディングされているため、私の推論は正しいようです。

于 2011-11-08T13:09:50.550 に答える
2

MARSシミュレータhttp://courses.missouristate.edu/KenVollmar/MARS/download.htmを使った簡単な実験では、答えは-6、ライン数の違いは-5、指示後にPCが1増えるため-1でした。 .

于 2011-11-08T13:13:46.567 に答える