在有关编译器中使用的中间表示的书籍、文章、幻灯片和教程中,三地址代码 (TAC) 是一种常见的代码。我的问题是关于以下 TAC 示例
t0 = a
t1 = a + b
a = t2
在这个例子中,我们有三个带有两个变量的行:a 和 b;和三个临时变量:t0、t1 和 t2。例如,在将此类 TAC 转换为 MIPS 程序集时,第一个和最后一个很容易如下所示:
lw t0, sp, a.offset
sw t2, sp, a.offset
但我必须承认,我不知道如何翻译中间 TAC,因为 MIPS(和许多其他 RISC 处理器)没有能够同时获取两个内存操作数的指令。
所以我的问题是:(1)如何将这种 TAC 转换为 RISC 指令,以及;(2) 为什么现在这么多处理器都是基于 RISC 的,为什么通常使用这种 TAC?它是从处理器过去更多地基于 CISC 并允许从内存中多次提取时遗留下来的吗?
或者
也许我对变量在此类 TAC 上的含义有错误的解释。如果是这样,我应该如何解释 TAC 中的这些变量?