7.1代码生成器设计中的问题 7.1.3寄存器分配 运算对象处于寄存器中的指令通常比运算对 象处于内存的指令要短一些,执行也快一些 寄存器分配 选择驻留在寄存器中的一组变量 寄存器指派 为要驻留在寄存器的变量选择具体寄存器
7 1. 代码生成器设计中的问题 7.1.3 寄存器分配 运算对象处于寄存器中的指令通常比运算对 象处于内存的指令要短一些,执行也快一些 • 寄存 分器 配 选择驻留在寄存器中的 选择驻留在寄存器中的 组变量 一 • 寄存 指派 器 为要驻留在寄存器的变量选择具体寄存器
7.1代码生成器设计中的问题 7.1.4计算次序选择 例 某种计算次序可能会比其他次序需要较少 的寄存器来保存中间结果(见后面例题3)
7 1. 代码生成器设计中的问题 7.1.4 计算次序选择 • 例 某种计算次序可能会比其他次序需要较少 的寄存器来保存中间结果(见后面例题3)
7.2 目标语言 7.2.1目标机器的指令集 ·选择可作为几种微机代表的寄存器机器 ·4个字节组成1个字,有n个通用寄存器R0, R1,,Rn-1。 。二地址指令: op源,目的 MOV 源传到目的 ADD 源加到目的} SUB {目的减去源
7 2. 目 标 语 言 7.2.1 目标机器的指令集 • 选择可作为几种微机代表的寄存器机器 • 4个字节组成1个字,有n 个通用寄存器R0, R1, …, Rn-1。 • 二地址指令: op 源,目的 MOV {源传到目的} ADD {源加到目的} SUB {目的减去源}
7.2 目标语言 ·地址模式和它们的汇编语言形式及附加代价 模式 形式 地址 附加代价 绝对地址 M M 1 寄存器 R R 0 变址 c(R) c contents(R) 1 间接寄存器*R contents(R) 0 间接变址 *C(R) contents(c+contents(R)) 立即数 #c
7 2. 目 标 语 言 • 地址模式和它们的汇编语言形式及附加代价 模式 形式 地址 附加代价 绝对地址 M M 1 寄存器 RR 0 变址 c(R) c + contents(R) 1 间接寄存器 R contents(R) 0 间接变址 c(R) cont t en s(c + cont t en s(R)) 1 立即数 #c c 1
7.2目标语言 ·例指令实例 MOV RO, M MOV 4(R0), M 4(RO):contents(4+contents(RO)) MOV *4R0), M *4(RO):contents(contents (4+contents(RO))) MOV #1, RO
7 2. 目 标 语 言 • 例 指令实例 MOV R0, M MOV 4(R0), M 4(R0):contents(4 + contents(R0)) MOV 4(R0), M 4(R0):contents contents(contents contents (4 + contents contents(R0))) MOV #1, R0