目标语言
熟悉目标计算机及其指令集是设计一个优秀代码生成器的前提。为了给某个目标机器上的一个完整的源程序生成高质量代码。我们需要了解该目标机的许多细节。
一个简单的目标机模型
一个简单的三地址机器的模型。它具有加载和保存操作。计算操作、跳转操作、无条件跳转。
- 假设有如下种类的指令可用:
- 加载指令。
LD dst addr
(用于把addr位置的值加载到位置dst) - 保存指令。
ST x, r
(把寄存器r上的值保存到位置x) - 计算运算。
<OP> dst src1 src2
(使用src1和src1执行运算并将结果保存在dst中) - 无条件跳转。
BR L
(跳转到标号为L的机器指令) - 条件跳转。
Bcond r L
(r是一个寄存器而L是一个标号)
- 假设有多种寻址模式
- 变量名寻址。
- 下标寻址。
- 指针寻址。
- 直接常数寻址。
- 指令代价
我们经常会指出编译及运行一个程序所需的带价。根据我们在优化一个程序时感兴趣的方面,我们会使用不同的度量。
常用的度量包括编译时间、目标程序大小、运行时间、能耗等。
(详见《编译原理》p332)
(END)