ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:147.04KB ,
资源ID:28635603      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/28635603.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(xt09答案.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

xt09答案.docx

1、xt09答案练习9.1解:程序的流图如下练习9.2解:各结点n的控制结点集D(n)如下: D(n0) = n0 D(n1) = n0, n1 D(n2) = n0, n1, n2 D(n3) = n0, n1, n2, n3 D(n4) = n0, n1, n2, n4 D(n5) = n0, n1, n2, n5 D(n6) = n0, n1, n2, n5, n6 D(n7) = n0, n1, n2, n5, n6, n7 回边和循环: 因为 D(n5) = n0, n1, n2, n5 ,且 n5 - n2,所以 n5 - n2为一条回边。根据它求出的循环 L1 = n2, n5, n

2、3, n4。 因为D(n6) = n0, n1, n2, n5, n6 ,且 n6 - n1,所以n6 - n1为一条回边。根据这条回边,求出的循环 L2 = n6, n1, n5, n3, n4, n2。 练习9.3解: (1)设数组元素按行存放,A、B、C数组都是 n*n 的二维数组,各维的下界均为0,每个元素占一个字(4个字节),则数组元素(如Ai, j)的地址计算公式为: D(Ai, j) = addr(A) + (i - 0) * n + (j - 0) * 4 = addr(A) + 4 * ( i * n + j ) 该程序的三地址代码序列被划分成基本块后如下: (2)程序流图如

3、下: (3)仅基本块B7中有公共子表达式,删除公共子表达式后基本块B7变换成: (4)根据(2)的程序流图,每个结点的控制结点集如下: D(B1) = B1 D(B2) = B1, B2 D(B3) = B1, B2, B3 D(B4) = B1, B2, B3, B4 D(B5) = B1, B2, B3, B4, B5 D(B6) = B1, B2, B3, B4, B5, B6 D(B7) = B1, B2, B3, B4, B5, B6, B7 D(B8) = B1, B2, B3, B4, B5, B6, B8 D(B9) = B1, B2, B3, B4, B9 根据回边 B7 -

4、 B6,循环L1为: L1 = B7, B6 根据回边 B8 - B4,循环L2为: L2 = B8, B6, B7, B5, B4 根据回边 B9 - B2, 循环L3为: L3 = B9, B4, B5, B6, B7, B8, B3, B2 经循环优化后三地址代码序列变为: 练习9.4 解:把本题的三地址代码划分成基本块并画出其程序流图显示在图9.4(1)中,其中有三个基本块B1,B2,B3,有一条回边B2 - B2,相应的循环是B2。 (1)代码外提:由于循环中没有不变运算,故不做此项优化 (2)强度削弱:B2中A和B都是I的归纳变量。优化结果显示在图9.4(2)中。 (3)删除归纳变

5、量:变换循环控制条件,删除归纳变量I后的流图显示在图9.4(3)中 练习9.5解:采用字节地址,两个字节作为一个机器字。(1)程序的四元式中间代码如下: B1: read N /* 置初值 */ i := 2 B2: if i N goto B4 /* 第一个for语句 */ B3: T1 := i T2 := addr(A) /* 数组A的基地址 */ T1 := 2 * T1 T2T1 := true i := i + 1 goto B2 B4: i := 2 T3 := N * 0.5 T3 := T3 + 1 /* T3是对T3的值取整 */ B5: if i T3 goto B12

6、B6: T4 := i T5 := addr(A) T4:= 2 * T4 if T5T4 goto B8 B7: goto B11 B8: j := 2 * i B9: if j N goto B11 /* 第三个for语句 */ B10: T6 := j T7 := addr(A) T6 := 2 * T6 T7T6 = false j := j + i goto B9 B11: i := i + 1 goto B5 B12: (2)根据四元式的中间代码,可划分成基本块B1,B2,B3,B4,B5,B6,B7,B8,B9,B10,B11。其程序流图如下: 考察上面的程序流图: D(B3)

7、= B1, B2, B3 又有 B3 - B2,因此 B3 - B2 是一条回边。根据它找到的循环 L1 = B2, B3 。 D(B10) = B1, B2, B4, B5, B6, B9, B10 ,又有 B10 - B9,所以 B10 - B9 是一条回边。根据这条回边找到循环 L2 = B9, B10 。 D(B11) = B1, B2, B4, B5, B6, B9, B11 ,又有 B11 - B5,因此 B11 - B5 是一条回边。根据这条回边找到循环 L3 = B11, B9, B10, B8, B7, B6, B5 (3)进行代码外提 把在循环中不随循环变化的操作提到循环外

8、的前置结点中,且在基本块中作复写传播和删除无用赋值。结果程序流图如下: (4)进行强度削弱和删除归纳变量后,其程序流图如下: 练习9.6 解:本题程序的程序流图如图9.6(1)所示。 (1)计算各基本块的到达-定值集INB。公式为: INB = OUTP PPB OUTB = GENB ( INB - KILLB ) GENB和KILLB由程序流图直接求出,显示在表9.6(1)中。 表9.6(1) 基本块GENB位向量KILLB位向量B1 d1, d2 11000000 d3, d4, d6 00110100B2 d3, d4 00110000 d1, d2, d6 11000100B3 d6

9、 00000100 d1, d4 10010000B4 00000000 00000000 求各基本块到达-定值的初值及各遍的执行结果显示在表9.6(2)中。表9.6(2)基本块初值第一遍后第二遍后第三遍后INBOUTBINBOUTBINBOUTBINBOUTBB10000000011000000000000001100000000000000110000000000000011000000B20000000000110000110001000011000011100100001100001110010000110000B300000000000001000011000000100100001

10、10000001001000011000000100100B40000000000000000001100000011000000110000001100000011000000110000(2)求各基本块中各变量引用点的ud链: 假设在程序中某点u引用了变量a,则把能到达u的a的所有定值点,称为a在引用点u的引用-定值链(简称ud链)。可以利用到达-定值信息来计算各个变量在任何引用点的ud链。 由图9.6(1)的程序流图可知,I的引用点是d3、d5和d6,J的引用点是d3和d8。 B2中I和J的引用点d3前面没有对I和J的定值点,其ud链在INB2= d1, d2, d3, d6 中,所以I

11、在引用点d3的ud链是 d1, d6 ;J在引用点d3的ud链是 d2, d3 。 在B2中I的引用点d5前面有I的定值点d4,且在d4定值后到达d5,所以I在引用点d5的ud链是 d4 。 B3中I的引用点d6前面没有I的定值点,其ud链是INB3中I的所有定值点,所以是 d4 。 B4中J的引用点d8前面没有对J的定值点,其ud链是INB4中J的所有定值点。已知INB4 = d3, d4 ,所以,J的引用点d8的ud链是 d3 。(3)各基本块出口的活跃变量集v-OUTB: 对程序中某变量a和某点P,如果存在一条从P开始的道路,其中引用了a在P点的值,则称a在点P是活跃的。计算公式如下:

12、V_INB = USEB ( V_OUTB - DEFB ) V_OUTB = V_INS SSB其中,SB是B的所有后继块组成的集合。 DEFB和USEB可以从给定流图直接求出。从图9.6(1)的流图中求出的各基本块的DEFB和USEB显示在表9.6(3)中。表9.6(3) 基本块USEBDEFBB1 I, J B2 I, J B3 I B4 J 计算次序为B4, B3, B2, B1,各次迭代结果显示在表9.6(4)中。表9.6(4) 基本块第一次迭代后第二次迭代后第三次迭代后V_INBV_OUTBV_INBV_OUTBV_INBV_OUTBB1 I, J I, J I, J B2 I,

13、J I, J I, J I, J I, J I, J B3 I I, J I, J I, J I, J B4 J J J (4)各基本块变量定值点的du链 一个变量a在某点P定值后该定值到达a的那些引用点成为该定值点的定值-引用链(简称du链)。使用下面的方程式进行计算: D_INB = D_USEB ( D_OUTB - D_DEFB ) D_OUTB = D_INS SSB其中SB是B的后继基本块集。D_USEB和D_DEFB根据程序流图可直接求出。本题根据图9.6(1)的程序流图求出的D_USEB和D_DEFB显示在表9.6(5)中。表9.6(6) 基本块D_DEFBD_USEBB1 (

14、d3, I), (d5, I), (d6, I), (d3, J), (d8, J) B2 (d6, I), (d8, J) (d3, I), (d3, J) B3 (d3, I), (d5, I) (d6, I) B4 (d8, J) 变量I和J的D_INB和D_OUTB的计算结果分别显示在表9.6(6)和表9.6(7)中。表9.6(6) 基本块第一次迭代后第二次迭代后第三次迭代后D_INBD_OUTBD_INBD_OUTBD_INBD_OUTBB1000000000010000000000000001000000000000000100000B20010000000000100001000

15、00000001000010000000000100B3000001000000000000000100001000000000010000100000B4000000000000000000000000000000000000000000000000根据表9.6(6),D_OUTB1 = 00100000,故I在B1中定值点d1的du链是 d3 。D_OUTB2 = 00000100,故I在B2中定值点d4的du链是 d5, d6 。D_OUTB3 = 00100000,故I在B3中定值点d6的du链是 d3 。表9.6(7) 基本块第一次迭代后第二次迭代后第三次迭代后D_INBD_OUTB

16、D_INBD_OUTBD_INBD_OUTBB1000000000010000000000000001000000000000000100000B2001000000000000100100000001000010010000000100001B3000000000000000000100000001000000010000000100000B4000000010000000000000001000000000000000100000000根据表9.6(7),D_OUTB1 = 00100000,J在B1中定值点d2的du链是 d3 。D_OUTB2 = 00100001,故J在B2中定值点d

17、3的du链是 d3, d8 。练习9.7解:对本题程序划分基本块并构造其程序流图,结果显示在图9.7(1)中,流图中以深度为主次序为:B1, B2, B3, B5, B7, B4, B6。()各基本块的到达定值集INB:从图9.7(1)的程序流图直接求GENB和KILLB,显示在表9.7(1)中。到达定值集的计算结果显示在表9.7(2)中。表9.7(1)基本块GENB位向量KILLB位向量B1 d1 1000000000 d5 0000100000B2 d2 010* d9 0000000010B3 0000000000 0000000000B5 d7 0000001000 000000000

18、0B7 d9 0000000010 d2 010*B4 0000000000 0000000000B6 d5 0000100000 d1 1000000000表9.7(2)基本块初值第一次迭代第二次迭代第三次迭代INBOUTBINBOUTBINBOUTBINBOUTBB100000000001000000000000000000010000000000000000000100000000000000000001000000000B20000000000010*100010000011001000001100101010110010100011001010101101101000B3000000

19、00000000000000110010001011001000101100101010110010101011001010101100101010B500000000000000001000110010101011001010101100101010110010101011001010101100101010B700000000000000000010100010101010001010101100101010100010101011001010101000101010B4000000000000000000001100100010110010001011001010101100101010

20、11001010101100101010B6000000000000001000001100101010010*1100101010010*1100101010010*(2)各基本块中各变量的ud链:I在B3中引用点d3的ud链是 d2, d9 ;I在B5中引用点d7的ud链是 d2, d9 ;I在B7中引用点d9的ud链是 d2, d9 ;N在B3中引用点d3的ud链是 d1, d5 ;N在B5中引用点d7的ud链是 d1, d5 ;N在B4中引用点d4的ud链是 d1, d5 ;N在B8中引用点d5的ud链是 d1, d5 ;N在B5中引用点d8的ud链是 d7 ;(3)各基本块出口的活跃

21、变量集V_OUTB:使用下面的联立方程: V_INB = USEB ( V_OUTB - DEFB ) V_OUTB = V_INS SSB根据图9.7(1)的程序流图,求出USEB和DEFB显示在表9.7(3)中。已知各基本块的深度为主次序的逆序为B6, B4, B7, B5, B3, B2, B1。各次迭代结果显示在表9.7(4)中。表9.7(3)基本块DEFBUSEBB1 N B2 I B3 I, N B5 J I, N B7 I B4 N B6 N 表9.7(4)基本块第一次迭代第二次迭代第三次迭代V_INBV_OUTBV_INBV_OUTBV_INBV_OUTBB1 N N N B2

22、 N I, N N I, N N I, N B3 I, N I, N I, N I, N I, N I, N B5 I, N I, N I, N I, N I, N I, N B7 I I, N I, N I, N I, N B4 N N N N N N B6 N N N N N (4)各基本块中变量定值点的du链。计算采用下面的联立方程: D_INB = D_USEB ( D_OUTB - D_DEFB ) D_OUTB = D_INS SSB 其中D_USEB和D_DEFB可以从图9.7(1)的程序流图直接求出,显示在表9.7(5)中。D_INB和D_OUTB的计算结果显示在表9.7(6)中。 注:下表中用 I:d3, d1, d9表示(d3, I), (d7, I), (d9, I)。表9.7(5)基本块D_DEFBD_USEBB1 N: d3, d4, d5, d7 B2 I: d3, d7, d9 B3 I: d3 , N: d3 B5 I: d7 , N: d7 B7 I: d3, d7 I: d9 B4 N: d4 B6 N: d3, d4, d7 N: d5 表9.7(6)基本块第一次迭代第二次迭代第三次迭代D_INBD_OUTBD_INBD_OUTBD_INBD_OUTBB1 N:d3,d4,d5,d7

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1