1
我正在做一个项目,在这个项目中我必须创建一个可以为C代码生成MIPS汇编代码的翻译器。我正在使用的编程语言是C++,并且我已经完成了三代地址代码的生成,并且对如何进一步深入了解感到困惑。如何将三个地址代码转换为MIPS汇编语言?
我正在做一个项目,在这个项目中我必须创建一个可以为C代码生成MIPS汇编代码的翻译器。我正在使用的编程语言是C++,并且我已经完成了三代地址代码的生成,并且对如何进一步深入了解感到困惑。如何将三个地址代码转换为MIPS汇编语言?
如前所述,这是一个直接翻译。没有什么可以澄清的。作为一个例子,下面三个地址代码:
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地址代码?你能澄清吗? (我已经删除了关于你的问题的编译器优化标记,考虑到它还没有完全正常工作,我假设你没有优化。) – Corbin 2012-04-28 09:28:16
开始寻找一个3地址指令的翻译,比如说'add' 。你可以在MIPS指令列表中找到一个等价物吗?也许是近似的等值? – 2012-04-28 09:48:03
@user - 您必须查看每个3地址指令,并弄清楚如何在汇编中执行此操作。然后产生一个或多个汇编指令。 – 2012-04-28 09:57:47