编译原理 第十一章代码生成 http://sei.nudt.edu.cn/cp 网上教学系统:070606302:编译原理
编译原理 第十一章 代码生成 http://sei.nudt.edu.cn/cp 网上教学系统: 070606302: 编译原理
源程序 表 词法分析器 出 单词符号 语法分析器 格 语法单位 错 中间代码生成器 管 四元式 处 优化段 理 四元式 理 目标代码生成器 目标代码 国防科技大学计算机系602教研室
国防科技大学计算机系602教研室 词法分析器 语法分析器 中间代码生成器 优化段 源程序 单词符号 语法单位 四元式 表 格 管 理 出 错 处 理 目标代码生成器 四元式 目标代码
代码生成是把语法分析后或优化后的中间 代码变换成目标代码。 ■目标代码一般有以下三种形式: 口能够立即执行的机器语言代码,所有地址已经 定位; 口待装配的机器语言模块。执行时,由连接装配 程序把它们和某些运行程序连接起来,转换成 能执行的机器语言代码; 口 汇编语言代码。尚须经过汇编程序汇编,转换 成可执行的机器语言代码。 国防科技大学计算机系602教研室
国防科技大学计算机系602教研室 ◼ 代码生成是把语法分析后或优化后的中间 代码变换成目标代码。 ◼ 目标代码一般有以下三种形式: 能够立即执行的机器语言代码,所有地址已经 定位; 待装配的机器语言模块。执行时,由连接装配 程序把它们和某些运行程序连接起来,转换成 能执行的机器语言代码; 汇编语言代码。尚须经过汇编程序汇编,转换 成可执行的机器语言代码
■代码生成着重考虑的问题: 口如何使生成的目标代码较短; 口如何充分利用计算机的寄存器,减少目标代 码中访问存贮单元的次数。 口如何充分利用计算机的指令系统的特点。 国防科技大学计算机系602教研室
国防科技大学计算机系602教研室 ◼ 代码生成着重考虑的问题: 如何使生成的目标代码较短; 如何充分利用计算机的寄存器,减少目标代 码中访问存贮单元的次数。 如何充分利用计算机的指令系统的特点
11.1基本问题 ■代码生成器的输入 口代码生成器的输入包括源程序的中间表示,以 及符号表中的信息 口类型检查 国防科技大学计算机系602教研室
国防科技大学计算机系602教研室 11.1 基本问题 ◼ 代码生成器的输入 代码生成器的输入包括源程序的中间表示,以 及符号表中的信息 类型检查
11.1基本问题 ■ 目标程序 口绝对机器代码、可再定位机器语言、汇编语言 口采用汇编代码作为目标语言 ■指令选择 ▣a:=a+1 INC a ■LDRO,a ADD RO,#1 ST RO,a 国防科技大学计算机系602教研室
国防科技大学计算机系602教研室 11.1 基本问题 ◼ 目标程序 绝对机器代码、可再定位机器语言、汇编语言 采用汇编代码作为目标语言 ◼ 指令选择 a:=a+1 ◼ INC a ◼ LD R0, a ADD R0, #1 ST R0, a
11.1基本问题 ■ 寄存器分配 口在寄存器分配期间,为程序的某一点选择驻留 在寄存器中的一组变量。 口在随后的寄存器指派阶段,挑出变量将要驻留 的具体寄存器。 ■计算顺序选择 国防科技大学计算机系602教研室
国防科技大学计算机系602教研室 11.1 基本问题 ◼ 寄存器分配 在寄存器分配期间,为程序的某一点选择驻留 在寄存器中的一组变量。 在随后的寄存器指派阶段,挑出变量将要驻留 的具体寄存器。 ◼ 计算顺序选择
11.2目标机器模型 ■考虑一个抽象的计算机模型 口具有多个通用寄存器,他们既可以作为累加器, 也可以作为变址器。 口运算必须在某个寄存器中进行。 口含有四种类型的指令形式 国防科技大学计算机系602教研室
国防科技大学计算机系602教研室 11.2 目标机器模型 ◼ 考虑一个抽象的计算机模型 具有多个通用寄存器,他们既可以作为累加器, 也可以作为变址器。 运算必须在某个寄存器中进行。 含有四种类型的指令形式
类型 指令形式 意义(设op是二目运 算符) 直接地址型 op Ri,M (R)Op(D→R: 寄存器型 op Ri,Ri R)op(R)→R 变址型 op Ri,c(Ri) (R)Op(R)+c)→R 间接型 op Ri,*M (R)p(M)→R op Ri,*Ri (R)op(R)→R op Ri,*c(Ri) R)op(R)+c)→R 如果op是一目运行符,则“opR,M”的意 义为:op(M)→R, 其余类型可类推。 国防科技大学计算机系602教研室
国防科技大学计算机系602教研室 类 型 指令形式 意 义(设 op 是二目运 算 符) 直接地址型 op Ri , M (Ri ) op (M) Ri 寄存器型 op Ri , Rj (Ri ) op (Rj ) Ri 变址型 op Ri , c(Rj ) (Ri ) op ((Ri )+ c) Ri 间接型 op Ri , *M op Ri , *Rj op Ri , *c(Rj ) (Ri ) op ((M)) Ri (Ri ) op ((Rj )) Ri (Ri ) op (((Rj )+ c)) Ri 如果op是一目运行符,则“op Ri , M”的意 义为:op(M) Ri,其余类型可类推
0p包括一般计算机上常见的一些运算符,如 ADD 加 SUB 减 MUL DIV 乘除 国防科技大学计算机系602教研室
国防科技大学计算机系602教研室 op 包括一般计算机上常见的一些运算符,如 ADD 加 SUB 减 MUL 乘 DIV 除