第10章(2)代码生成 n目标机器模型 n一个简单的代码生成器 n作业 2023/2/28 课程目绿☒m
2023/2/28 第10章 (2) 代码生成 n 目标机器模型 n 一个简单的代码生成器 n 作业 课程目录 1/11
代码生成概述p279 n逻辑阶段编译程序的最后一个阶段 n输入和输出中间代码 等价的目标代码 n目标代码的一般形式 u汇编语言代码 F优点:目标程序好读、可移植 F缺点:需经汇编器辅助代码生成 n代码生成器的设计环境 U要依赖于目标机器、指令系统和操作系统。 2023/2/28 国D21
2023/2/28 代码生成概述 p279 n 逻辑阶段 编译程序的最后一个阶段 n 输入和输出 中间代码 等价的目标代码 n 目标代码的一般形式 u 汇编语言代码 F 优点:目标程序好读、可移植 F 缺点:需经汇编器辅助代码生成 n 代码生成器的设计环境 u 要依赖于目标机器、指令系统和操作系统。 2/11
目标代码生成器的基本设计要求 n目标代码尽可能的短 n充分地发挥目标机可用资源效率 例如: u尽可能地使用执行速度快的指令 u充分利用寄存器和变址器,以节省访 问内存的时间 2023/2/28
2023/2/28 目标代码生成器的基本设计要求 n 目标代码尽可能的短 n 充分地发挥目标机可用资源效率 例如: u 尽可能地使用执行速度快的指令 u 充分利用寄存器和变址器,以节省访 问内存的时间 3/11
目标机模型 假想的计算机模型 p280 n常备指令 arc—源操作数 dst一目的操作数 指令形式 意义 举例 LD dst,arc (arc)☐dst LDR1,B(B)口R1取数 MOVE LD R1,#11 R ST arc,dst (arc)口dst STR1,B(R1)口B存数 ADD dst,arc (dst)+(arc)☐dst ADD R1,Ro(R)+(Ro)☐R SUB dst,arc (dst)-(arc)dst SUB R1,T1 (R1)-(T1)Ri MUL dst,arc (dst)米(arc)口dst MUL R1,D(R)*(D)☐R DIV dst,arc (dst)/(arc)dst DIV R1,A (Ri)/(A)R ●●●●●● ●●●●●● ●●●●●● 2023/2/28 国D4m
2023/2/28 目标机模型 假想的计算机模型 p280 n 常备指令 arc—源操作数 dst—目的操作数 指令形式 意 义 举 例 LD dst,arc (arc) dst LD R1,B (B) R1 取数 MOVE LD R1,#1 1 R1 ST arc,dst (arc) dst ST R1,B (R1) B 存数 ADD dst,arc (dst)+(arc) dst ADD R1,R0 (R1)+(R0) R1 SUB dst,arc (dst)-(arc) dst SUB R1,T1 (R1)-(T1) R1 MUL dst,arc (dst)*(arc) dst MUL R1,D (R1)*(D) R1 DIV dst,arc (dst)/(arc) dst DIV R1,A (R1)/(A) R1 . . . 4/11
一个简单的代码生成器 n算法策略 ù依次把每条中间代码变换成目标代码 ù在一个基本块范围内充分利用寄存器 n如何充分利用寄存器—做到 ù尽可能地让变量(存结果)的值保留在寄存器中 ù尽可能引用变量(操作数)在寄存器中的值,直到 该寄存器必须用来存放别的变量值或者已到达基本 块出口为止 n为了生成高效的目标代码,充分利用寄存器, 代码生成器需要了解如下信息 u哪些变量以后还会被引用 u变量的值当前在何处 一寄存器描述和地址描述 2023/2/28
2023/2/28 一个简单的代码生成器 n 算法策略 u 依次把每条中间代码变换成目标代码 u 在一个基本块范围内充分利用寄存器 n 如何充分利用寄存器——做到 u 尽可能地让变量(存结果)的值保留在寄存器中 u 尽可能引用变量(操作数)在寄存器中的值,直到 该寄存器必须用来存放别的变量值或者已到达基本 块出口为止 n 为了生成高效的目标代码,充分利用寄存器, 代码生成器需要了解如下信息 u 哪些变量以后还会被引用 u 变量的值当前在何处——寄存器描述和地址描述 5/11