2012-04-28 8 views
1

私は、Cコード用のMIPSアセンブリコードを生成するトランスレータを作成する必要があるプロジェクトを行っています。使用しているプログラミング言語はC++であり、私は3つのアドレスコードを生成するまでやっており、さらに進む方法について本当に混乱しています。3つのアドレスコードをMIPSアセンブリ言語に変換するにはどうすればよいですか?

+2

3住所コード?明確にすることはできますか?コンパイラ最適化タグを削除しました。まだ完全には機能していないと考えて、最適化していないと仮定しています。 – Corbin

+1

3つのアドレス命令の翻訳を見つけることから始めて、 。あなたはMIPSの命令のリストで同等のものを見つけることができますか?おそらくおおよその相当物ですか? –

+0

@user - 各3アドレス命令を見て、どのように組み立てるのかを理解する必要があります。次に、1つまたは複数のアセンブリ命令を生成します。 –

答えて

3

すでに述べたように、それは直接の翻訳です。本当に明らかにするものはありません。例として、以下の3番地コード取る:

 i := 0     ; assignment 
L1: if i >= 10 goto L2  ; conditional jump 
     t0 := i*i 
     t1 := &b    ; address-of operation 
     t2 := t1 + i   ; t2 holds the address of b[i] 
     *t2 := t0    ; store through pointer 
     i := i + 1 
     goto L1 
L2: 

をMIPSの翻訳は次のとおりです。

 li $t0, 0    #allocator assigned i to t0 
L1:  bge $t0, 10, L2  
     mult $t1, $t0, $t0 
     la $t2, b    
     add $t3, $t2, $t0 
     sw $t1, ($t3)  
     addi $t0, $t0, 1 
     j L1 
L2: 

そのように3アドレスを持つには十分ご幸運、あなたはほとんど何もする必要があります。命令に付随する対応するオペコードを探します。レジスタの割り当てはすでに完了しています。 3アドレスコードが文字通り束である場合、私は文字列から情報を抽出するのではなく、小さなパーサー(ジェネレータを使用)を書くことを検討します。

関連する問題