P12
姓名:田昊东 学号:211275022
编译原理作业12¶
8.6.1
LD R1,b
LD R2,c
MUL R1,R1,R2
LD R2,1
SUB R1,R2,R1
ST x,R1
8.6.5
^c39f28
LD R1,b
//寄存器描述符:R1-b
//地址描述符:b-R1-memb,c-memc,a-mema,x-memx
LD R2,c
//寄存器描述符:R1-b,R2-c
//地址描述符:b-R1-memb,c-R2-memc,a-mema,x-memx
MUL R1,R1,R2
//寄存器描述符:R1-b*c,R2-c
//地址描述符:b-memb,c-R2-memc,a-mema,x-memx
LD R2,1
//寄存器描述符:R1-b*c,R2-a
//地址描述符:b-memb,c-memc,a-R2-mema,x-memx
SUB R1,R2,R1
//寄存器描述符:R1-x,R2-a
//地址描述符:b-memb,c-memc,a-R2-mema,x-R1
ST x,R1
//寄存器描述符:R1-x,R2-a
//地址描述符:b-memb,c-memc,a-R2-mema,x-R1-memx
9.1.1
^2a0fdd
- 循环:\(\{B_3,B_4\}\{B_2,B_3,B_4,B_5\}\)
- 可以替换的位置:\(a:\{(3),(4),(6),(8),(9)\}\) 位置可以直接替换为 \(1\),\(b\) 没有可以进行替换的位置
- 对于循环 \(\{B_3,B_4\}\) 表达式 \((6)a+b\) 一定在 \((3)\) 中计算过,为公共子表达式;对于循环 \(\{B_2,B_3,B_4,B_5\}\)有\(a+b,c-a\)
- 对于循环 \(\{B_3,B_4\}\) \((6)d=a+b\)为循环不变式;对于循环 \(\{B_2,B_3,B_4.B_5\}\)同样只有 \((6)d=a+b,\)
9.1.4
^c7fe5c
- 优化之后的代码
dp = 0
i = 0
t1 = 0
L: t2 = A[t1]
t4 = B[t1]
t5 = t2*t4
dp = dp+t5
i = i+1
t1 = t1+8
if i<n goto L