• 締切済み

MIPSコードへの変換

下のコードをMIPSコードへ変換する際の要点を教えて欲しいです for( i=0; i<x; i+=1 ) y+=1;

みんなの回答

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.4

ANo.3さんの回答への補足になると思うけど、要点は「遅延分岐」じゃないかな。 MIPSを含む一部のRISCアーキテクチャでは遅延分岐を採用しているので、分岐命令の次の命令は分岐に関わらず実行されます。コード生成ではこれを考慮して遅延スロットに適当な命令を入れることが必要です。

すると、全ての回答が全文表示されます。
回答No.3

これは、MIPS アーキテクチャを理解しているかどうかを問う問題なのでしょうね。 だから、具体的にコード展開するよりも、変換の際の要点を求められたということでしょうか。 MIPS アーキテクチャにかぎらず、RISCプロセッサは、単純な命令を(おおざっぱに言えば)同時多発的に実行することでスピードを上げるという技術ですから、それに適したコードを生成することは重要です。 その意味で、RISCプロセッサの性能はかなりの部分コンパイラの技術に依存しています。 かくいう私は、MIPS はみたこともないのですが、こんな感じかも。 普通のイメージのアセンブラだと、 for( i=0; i<x; i+=1 ) y+=1; は、こんな感じに展開されると思います(実際のニーモニックではありません) i = 0; L1: COMPARE i, x JUMP if GE L2: y++ i++ goto L1: L:2 ここで、まず問題になりそうなのは、 COMPARE i, x JUMP if GE L2: の2行です。 この2行には依存関係があるので、パイプラインがうまく機能しません。 これを考慮して、 L1: COMPARE i, x y++ JUMP if GE L2: i++ goto L1: のようにすれば、前後の行で依存関係が無くなり、パイプラインがうまく流れるのかもしれません。 (ただし、普通は y++ が1回余計に実行されてしまうので、このままではだめです) こんなことを考えることになるのかなとは思います。

すると、全ての回答が全文表示されます。
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

MIPS用のコンパイラでコンパイルしてください。

すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

・そのコードがどのような動作なのかをきちんと確実に理解する ・「MIPSコード」がどのようなものなのか確かめる

すると、全ての回答が全文表示されます。

関連するQ&A