コンパイラで使用される中間表現に関する本、記事、スライド、およびチュートリアルでは、Three Address Code (TAC) が一般的なものです。私の質問は、次の TAC の例についてです
t0 = a
t1 = a + b
a = t2
この例では、a と b の 2 つの変数を持つ 3 つの行があります。および 3 つの一時的なもの: t0、t1、および t2。たとえば、そのような TAC を MIPS アセンブリに変換する場合、最初と最後の TAC は次のように簡単に変更できます。
lw t0, sp, a.offset
sw t2, sp, a.offset
しかし、MIPS (および他の多くの RISC プロセッサ) には 2 つのメモリ オペランドを同時にフェッチできる命令がないため、中間の TAC を変換する方法がわかりません。
したがって、私の質問は次のとおりです。(1)そのようなTACをRISC命令にどのように変換するか、および; (2) 最近では非常に多くのプロセッサが RISC ベースのプロセッサであるのに、なぜそのような TAC が一般的に使用されるのですか? プロセッサがより CISC ベースで、メモリからの複数のフェッチが許可されていた時代からの遺産ですか?
また
たぶん、そのような TAC での変数の意味について間違った解釈をしているのでしょう。もしそうなら、TAC でそのような変数をどのように解釈すればよいですか?