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