代码生成- 引言
代码生成的任务
负责把源程序翻译成“目标机器”上的代码,目标机器可以是真实物理机器(X86,ARM,MIPS等),也可以是虚拟机(JVM等)
两个重要任务:
- 给源程序的数据分配计算资源
- 给源程序的代码选择合适的指令来实现
1、给数据分配计算资源
源程序的数据:全局变量、局部变量、动态分配等
机器计算资源:寄存器、数据区、代码区、栈区、堆区
根据程序的特点和编译器的设计目标,合理的为数据分配计算资源
例如,变量是放在内存里还是 寄存器 里?
2、给源程序的代码选择合适的机器指令
源程序的代码:表达式运算、语句、函数等
机器指令:算数运算、比较、跳转、函数调用返回
用机器指令实现高层代码的语义
- 等价性 源语言上S做的事情,要和目标语言上n条指令合起来所做的工作应该是完全一样的(此处的完全一样是指外部表现行为)
- 对机器指令集体系结构(ISA)的熟悉