Skip to content

P12

姓名:田昊东 学号:211275022

编译原理作业12

8.6.1 image.png

LD   R1,b
LD   R2,c
MUL  R1,R1,R2
LD   R2,1
SUB  R1,R2,R1
ST   x,R1

8.6.5image-20240523163715822

^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.1image-20240523163737184

^2a0fdd

  1. 循环:\(\{B_3,B_4\}\{B_2,B_3,B_4,B_5\}\)
  2. 可以替换的位置:\(a:\{(3),(4),(6),(8),(9)\}\) 位置可以直接替换为 \(1\)\(b\) 没有可以进行替换的位置
  3. 对于循环 \(\{B_3,B_4\}\) 表达式 \((6)a+b\) 一定在 \((3)\) 中计算过,为公共子表达式;对于循环 \(\{B_2,B_3,B_4,B_5\}\)\(a+b,c-a\)
  4. 对于循环 \(\{B_3,B_4\}\) \((6)d=a+b\)为循环不变式;对于循环 \(\{B_2,B_3,B_4.B_5\}\)同样只有 \((6)d=a+b,\)

9.1.4image-20240523163752010

^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