第9章目标代码生成 目标代码生成是把语法分析优化后的中间代码变换成目标 代码。目标代码的形式主要包括如下3种形式: 1、具有绝对地址的机器语言程序。能立即执行的机器语言 代码,主程序与子程序需要同时编译。 2、可浮动的机器语言程序。目标程序由若干个目的模块组 成,各模块包含目标程序的一部分代码,这些代码可在存 储空间浮动,装入到存储空间的任何位置。需要连接装入 程序把它们和某些运行程序连接起来才能运行 3、汇编语言形式的程序。尚须经过汇编程序汇编,转换成 可执行的机器语言代码
1 第9章 目标代码生成 目标代码生成是把语法分析优化后的中间代码变换成目标 代码。目标代码的形式主要包括如下3种形式: 1、具有绝对地址的机器语言程序。能立即执行的机器语言 代码,主程序与子程序需要同时编译。 2、可浮动的机器语言程序。目标程序由若干个目的模块组 成,各模块包含目标程序的一部分代码,这些代码可在存 储空间浮动,装入到存储空间的任何位置。需要连接装入 程序把它们和某些运行程序连接起来才能运行。 3、汇编语言形式的程序。尚须经过汇编程序汇编,转换成 可执行的机器语言代码
基本块 所谓基本块是指按顺序执行(不含分支结构 的中间代码(四元式)序列,其中只有一个入 口和一个出口,入口是第一个操作,出口是最 后一个操作。 对于基本块来说,执行只能从其入口进入,出口退 出 对于一个中间代码序列,可以把它划分为一系列的 基本块,在各基本块范围内,进行代码优化以及目 标代码生成
2 基本块 • 所谓基本块是指按顺序执行(不含分支结构) 的中间代码(四元式)序列,其中只有一个入 口和一个出口,入口是第一个操作,出口是最 后一个操作。 –对于基本块来说,执行只能从其入口进入,出口退 出。 –对于一个中间代码序列,可以把它划分为一系列的 基本块,在各基本块范围内,进行代码优化以及目 标代码生成
基本块划分的算法 1.求出程序中各个基本块的入口语句,它们是: (1)程序的第一个语句,或 (2)能由条件转移语句或无条件转移语句转移到的语句,或 (3)紧跟在条件转移语句或无条件转移语句后面的语句 2.对求出的每一入口语句,构造其所属的基本块 (即找出口语句)由该入口语句到: (1)下一入口语句或到 (2)转移语句 或到 (3)停语句之间的语句序列组成一个基本块 3.凡未被纳入某一基本块的语句,都是程序中控制流无法到 达的语句,可从程序中删除
3 基本块划分的算法 1.求出程序中各个基本块的入口语句,它们是: (1) 程序的第一个语句,或 (2) 能由条件转移语句或无条件转移语句转移到的语句,或 (3) 紧跟在条件转移语句或无条件转移语句后面的语句. 2.对求出的每一入口语句,构造其所属的基本块 (即找出口语句)由该入口语句到: (1) 下一入口语句 或到 (2) 转移语句 或到 (3) 停语句 之间的语句序列组成一个基本块。 3.凡未被纳入某一基本块的语句,都是程序中控制流无法到 达的语句,可从程序中删除
§9.2一个假想的计算机模型 以字节编址,主存容量为216个字节,机器字长为16bit 有8个通用寄存器:RO,R1,…,R7,且长度也为16bit 每条指令占用一个机器字,形式如下 OP arc, dst OP表示操作码,占4bit;arc和dst分别表示源操作数 和目的操作数的地址,各占6bit 由于6bit不能对整个内存空间进行寻址,因此将操作 数或其地址存放在紧跟指令之后的单元中
4 §9.2 一个假想的计算机模型 • 以字节编址,主存容量为2 16个字节,机器字长为16bit, 有8个通用寄存器:R0,R1,…,R7,且长度也为16bit。 每条指令占用一个机器字,形式如下: OP arc, dst OP表示操作码,占4bit;arc和dst分别表示源操作数 和目的操作数的地址,各占6bit。 由于6bit不能对整个内存空间进行寻址,因此将操作 数或其地址存放在紧跟指令之后的单元中
表9-1一个假想机的寻址方式 编码 名称 助记符 含义 汇编后的情况 寄存器模式 R(R)为操作数 2 间接寄存器模式 R(R)为操作数地址 变址模式 x(R)(R)+x为操作数地址X之值在本指令之后的单元中 间接变址模式 xB)/(R)+x为存放操作数地x之值在本指令之后的单元中 址的单元地址 文字常数X在本指令之后的单 5 直接操作数 #xx为操作数 元中 x为符号名,其值为操X的数据单元地址在本指令之 绝对地址 X 作数 后的单元中 间接地址 XX为符号名,其值为操作X的数据单元地址在本指令之 数地址 后的单元中
5