2

C コードの MIPS アセンブリ コードを生成するトランスレータを作成する必要があるプロジェクトを行っています。使用しているプログラミング言語は C++ で、3 つのアドレス コードの生成まで完了しましたが、さらに先に進む方法について本当に混乱しています。

4

1 に答える 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 に答える