8.1代码生成器的设计中的问题 8.1.3寄存器分配 运算对象处于寄存器和处于内存相比,指令 要短一些,执行也快一些 寄存器分配 选择驻留在寄存器中的一组变量 寄存器指派 挑选变量要驻留的具体寄存器
8.1 代码生成器的设计中的问题 8.1.3 寄存器分配 运算对象处于寄存器和处于内存相比,指令 要短一些,执行也快一些 • 寄存器分配 选择驻留在寄存器中的一组变量 • 寄存器指派 挑选变量要驻留的具体寄存器
8.1代码生成器的设计中的问题 8.1.4计算次序的选择 程序中计算的执行次序会影响目标代码的执 行效率 例 对表达式的计算而言,一种计算次序可能 会比其它次序需要较少的寄存器来保存中间 结果(见后面例题3) 选择最佳计算次序是一个NP完全问题
8.1 代码生成器的设计中的问题 8.1.4 计算次序的选择 程序中计算的执行次序会影响目标代码的执 行效率 • 例 对表达式的计算而言,一种计算次序可能 会比其它次序需要较少的寄存器来保存中间 结果(见后面例题3) • 选择最佳计算次序是一个NP完全问题
8.2目标机器 8.2.1目标机器的指令系统 选择可作为几种微机代表的寄存器机器 四个字节组成一个字,有个通用寄存器 R0,R1,.,Rn-1 ·二地址指令:0p 源,目的 MOV 源传到目的} ADD 源加到目的} SUB {目的减去源
8.2 目 标 机 器 8.2.1 目标机器的指令系统 • 选择可作为几种微机代表的寄存器机器 • 四个字节组成一个字,有n个通用寄存器 R0,R1, …,Rn-1 • 二地址指令: op 源,目的 MOV {源传到目的} ADD {源加到目的} SUB {目的减去源}
8.2目标机器 ·地址模式和它们的汇编语言形式及附加代价 模式 形式 地址 附加代价 绝对地址 M M 寄存器 R R 0 变址 c(R) c contents(R) 1 间接寄存器*R contents(R) 0 间接变址 *c(R) contents(c+contents(R)) 直接量 #c
8.2 目 标 机 器 • 地址模式和它们的汇编语言形式及附加代价 模式 形式 地址 附加代价 绝对地址 M M 1 寄存器 R R 0 变址 c(R) c + contents(R) 1 间接寄存器 R contents(R) 0 间接变址 c(R) contents(c + contents(R)) 1 直接量 #c c 1
8.2目标机器 ·例指令实例 MOV R0, M MOV 4R0), M 4R0)的值:contents(4+contents(R0) MOV *4(RO), M *4RO)的值:contents(contents(4+contents(R0) MOV #1, RO
8.2 目 标 机 器 • 例 指令实例 MOV R0, M MOV 4(R0), M 4(R0)的值:contents(4 + contents(R0)) MOV 4(R0), M 4(R0)的值:contents(contents(4 + contents(R0))) MOV #1, R0