C コードの MIPS アセンブリ コードを生成するトランスレータを作成する必要があるプロジェクトを行っています。使用しているプログラミング言語は C++ で、3 つのアドレス コードの生成まで完了しましたが、さらに先に進む方法について本当に混乱しています。
質問する
4263 次
1 に答える
5
すでに述べたように、それは直訳です。明確にすることは本当に何もありません。例として、次の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番地コードが文字通り文字列の集まりである場合、文字列から情報を抽出するのではなく、(ジェネレーターを使用して)小さなパーサーを作成することを検討します。
于 2012-04-28T18:53:50.983 に答える