私は次の MIPS コードを持っており、 正確性を維持しながら適切なパイプライン実行に必要なnop命令の数を減らすことができるように、コードを書き直し/並べ替えようとしています。データパスは停止も転送もしないと想定されています。この問題は 2 つのヒントを与えてくれます。分岐とジャンプが遅延し、遅延スロットを埋める必要があることを思い出させてくれます。また、必要に応じてメモリ アクセス命令 (lw、sw) のオフセット値を変更することを示唆しています。
LOOP: lw $1, 100 ($2)
addi $1, $1, 1
sw $1, 500 ($2)
addiu $2, $2, 4
bne $2, $10, LOOP
このコードが 1 つの配列の内容をインクリメントし、それを別の配列に格納していることは明らかです。したがって、ループを完了する前にインデックスを計算する必要があるため、このコードをどのように再配置できるか正確にはわかりません。
私の推測では、(私が理解している限りでは) 遅延スロット内の命令は常に実行されるため、分岐命令の後にlw命令を移動することになります。繰り返しますが、私はこの主題をよく理解していません。説明をいただければ幸いです。パイプライン処理全般は理解していますが、遅延分岐はあまり理解していません。ありがとう