1

一部の MIPS 命令には即時オフセットがあります。たとえば、lwコマンドを移動して の下の分岐遅延スロットを埋めるとbeq、その即時オフセットが 100 から 96 に変更されます。

PC     Loop: lw $2, 100($3)
PC+4         addi $3, $3, 4
PC+8         beq  $3, $4, Loop

に変換

PC   Loop: addi $3, $3, 4
PC+4       beq $3, $4, Loop
PC+8       lw $2, 96($3) # branch delay slot

PC は常に PC+4 なので、 100 - 8 + 4 = 96 になるのでしょうか? 指導が上に移動するとどうなりますか?例えば、

PC       Loop: xxxxxxxxxxxxx
PC+4           addi $5, 4($5)

これは正しいでしょうか?

PC       Loop: addi $5, 4($5)
PC+4           xxxxxxxxxxxxx
4

1 に答える 1

2

即時の変更は、PC とは関係ありません。

Loop: lw $2, 100($3)
      addi $3, $3, 4
      beq  $3, $4, Loop

オリジナルでは、アドレス ($3 + 100) からロードし、$3 に 4 を追加しています。

Loop: addi $3, $3, 4
      beq $3, $4, Loop
      lw $2, 96($3) # branch delay slot

変換されたものでは、$3 に 4 を追加し、アドレス ($3 + 96) = (original_$3 + 4 + 96) = (original_$3 + 100) からロードしています。lwこれは、との間の並べ替えでありaddi、即時 (addiブランチは $3 の新しい値に依存するため、遅延スロットに移動できません) に影響します。

于 2012-11-01T11:22:34.920 に答える