1
私は、Cコード用のMIPSアセンブリコードを生成するトランスレータを作成する必要があるプロジェクトを行っています。使用しているプログラミング言語はC++であり、私は3つのアドレスコードを生成するまでやっており、さらに進む方法について本当に混乱しています。3つのアドレスコードをMIPSアセンブリ言語に変換するにはどうすればよいですか?
私は、Cコード用のMIPSアセンブリコードを生成するトランスレータを作成する必要があるプロジェクトを行っています。使用しているプログラミング言語はC++であり、私は3つのアドレスコードを生成するまでやっており、さらに進む方法について本当に混乱しています。3つのアドレスコードをMIPSアセンブリ言語に変換するにはどうすればよいですか?
すでに述べたように、それは直接の翻訳です。本当に明らかにするものはありません。例として、以下の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アドレスコードが文字通り束である場合、私は文字列から情報を抽出するのではなく、小さなパーサー(ジェネレータを使用)を書くことを検討します。
3住所コード?明確にすることはできますか?コンパイラ最適化タグを削除しました。まだ完全には機能していないと考えて、最適化していないと仮定しています。 – Corbin
3つのアドレス命令の翻訳を見つけることから始めて、 。あなたはMIPSの命令のリストで同等のものを見つけることができますか?おそらくおおよその相当物ですか? –
@user - 各3アドレス命令を見て、どのように組み立てるのかを理解する必要があります。次に、1つまたは複数のアセンブリ命令を生成します。 –