📅  最后修改于: 2020-12-06 08:02:56             🧑  作者: Mango
在代码生成阶段,可能会出现各种问题:
目标程序是代码生成器的输出。输出可以是:
a)汇编语言:它允许子程序被单独编译。
b)可重定位的机器语言:它使代码生成过程更容易。
c)绝对机器语言:可以将其放置在内存中的固定位置,并可以立即执行。
这三个地址代码是:
a:= b + c
d:= a + e
低效的汇编代码是:
MOV b, R0 R0→b
ADD c, R0 R0 c + R0
MOV R0, a a → R0
MOV a, R0 R0→ a
ADD e, R0 R0 → e + R0
MOV R0, d d → R0
寄存器的访问速度比内存访问速度快。寄存器中涉及操作数的指令比存储器操作数涉及的指令更短,更快。
使用寄存器时,出现以下子问题:
寄存器分配:在寄存器分配中,我们选择将驻留在寄存器中的变量集。
寄存器分配:在寄存器分配中,我们选择包含变量的寄存器。
某些机器需要某些操作数和结果的偶数对寄存器。
考虑以下形式的除法指令:
D x, y
哪里,
x是偶数/奇数寄存器对中的除数偶数寄存器
y是除数
偶数寄存器用于保存提醒。
旧寄存器用于保存商。
目标代码的效率可能会受到执行计算顺序的影响。某些计算顺序比其他计算顺序需要更少的寄存器来保存中间结果。