📄 arti_10718.htm
字号:
<div>
<div><SUP>n4</SUP></div></div></td></tr></table>
<table cellSpacing=0 cellPadding=0 width="100%">
<tr>
<td>
<div>
<div>+</div></div></td></tr></table>
<table cellSpacing=0 cellPadding=0 width="100%">
<tr>
<td>
<div>
<div><SUP>n5</SUP></div></div></td></tr></table>
<table cellSpacing=0 cellPadding=0 width="100%">
<tr>
<td>
<div>
<div>*</div></div></td></tr></table>
<table cellSpacing=0 cellPadding=0 width="100%">
<tr>
<td>
<div>
<div>D,H</div></div></td></tr></table>
<table cellSpacing=0 cellPadding=0 width="100%">
<tr>
<td>
<div>
<div>E,I</div></div></td></tr></table>
<table cellSpacing=0 cellPadding=0 width="100%">
<tr>
<td>
<div>
<div><SUP>n6</SUP></div></div></td></tr></table>
<table cellSpacing=0 cellPadding=0 width="100%">
<tr>
<td>
<div>
<div><SUB>+</SUB></div></div></td></tr></table>
<table cellSpacing=0 cellPadding=0 width="100%">
<tr>
<td>
<div>
<div>F,J</div></div></td></tr></table>
<table cellSpacing=0 cellPadding=0 width="100%">
<tr>
<td>
<div>
<div><SUP>n7</SUP></div></div></td></tr></table>
<table cellSpacing=0 cellPadding=0 width="100%">
<tr>
<td>
<div>
<div><SUB>*</SUB></div></div></td></tr></table>
<table cellSpacing=0 cellPadding=0 width="100%">
<tr>
<td>
<div>
<div>G</div></div></td></tr></table>
<table cellSpacing=0 cellPadding=0 width="100%">
<tr>
<td>
<div>
<div><SUP>n8</SUP></div></div></td></tr></table>
<table cellSpacing=0 cellPadding=0 width="100%">
<tr>
<td>
<div>
<div>15</div></div></td></tr></table>
<table cellSpacing=0 cellPadding=0 width="100%">
<tr>
<td>
<div>
<div>K</div></div></td></tr></table>
<table cellSpacing=0 cellPadding=0 width="100%">
<tr>
<td>
<div>
<div><SUP>n9</SUP></div></div></td></tr></table>
<table cellSpacing=0 cellPadding=0 width="100%">
<tr>
<td>
<div>
<div><SUB>+</SUB></div></div></td></tr></table>
<table cellSpacing=0 cellPadding=0 width="100%">
<tr>
<td>
<div>
<div>L,M</div></div></td></tr></table> </P>
<div> </div>
<div> </div>
<div> </div>
<div> </div>
<div> </div>
<div> </div>
<div> </div>
<div> </div>
<div> </div>
<div> </div><br clear=all>
<div>假设只有G,L,M在基本块后面还要被引用,B2优化后的中间代码为:</div>
<div> D:=A+B</div>
<div> E:=A*B</div>
<div> F:=D+E</div>
<div> G:=3*F</div>
<div> L:=F+15</div>
<div> M:=L</div>
<div>假设只有L在基本块后面还要被引用,则B2优化后的中间代码为:</div>
<div>D:=A+B E:=A*B F:=D+E L:=F+15</div></div>
<P><br clear=all> </P>
<div align=center><B>第十一章</B><B> </B><B>目标代码生成</B><B></B></div>
<div> </div>
<div>1.对以下中间代码序列C:</div>
<div> T1:=B-C</div>
<div> T2:=A*T1</div>
<div> T3:=D+1</div>
<div> T4:=E-F</div>
<div> T5:=T3*T4</div>
<div> W:=T2/T5</div>
<div>假设可用寄存器为R0和R1,W是基本块出口的活跃变量,用简单代码生成算法生成其目标代码,同时列出代码生成过程中的寄存器描述和地址描述。</div>
<div>解答:</div>
<div>生成的目标代码、寄存器描述和地址描述如下:</div>
<P>
<table cellSpacing=0 cellPadding=0 border=1>
<tr>
<td vAlign=top width=164>
<div>中间代码</div></td>
<td vAlign=top width=164>
<div>目标代码</div></td>
<td vAlign=top width=164>
<div>寄存器描述</div></td>
<td vAlign=top width=164>
<div>地址描述</div></td></tr>
<tr>
<td vAlign=top width=164>
<div>T1:=B-C</div></td>
<td vAlign=top width=164>
<div>LD R0,B</div>
<div>SUB R0,C</div></td>
<td vAlign=top width=164>
<div>R0含T1</div></td>
<td vAlign=top width=164>
<div>T1在R0</div></td></tr>
<tr>
<td vAlign=top width=164>
<div>T2:=A*T1</div></td>
<td vAlign=top width=164>
<div>LD R1,A</div>
<div>MUL R1,R0</div></td>
<td vAlign=top width=164>
<div>R0含T1</div>
<div>R1含T2</div></td>
<td vAlign=top width=164>
<div>T1在R0</div>
<div>T2在R1</div></td></tr>
<tr>
<td vAlign=top width=164>
<div>T3:=D+1</div></td>
<td vAlign=top width=164>
<div>LD R0,D</div>
<div>ADD R0,#1</div></td>
<td vAlign=top width=164>
<div>R1含T2</div>
<div>R0含T3</div></td>
<td vAlign=top width=164>
<div>T2在R1</div>
<div>T3在R0</div></td></tr>
<tr>
<td vAlign=top width=164>
<div>T4:=E-F</div></td>
<td vAlign=top width=164>
<div>ST R1,T2</div>
<div>LD R1,E</div>
<div>SUB R1,F</div></td>
<td vAlign=top width=164>
<div>R0含T3</div>
<div>R1含T4</div></td>
<td vAlign=top width=164>
<div>T3在R0</div>
<div>T4在R1</div>
<div>T2在内存</div></td></tr>
<tr>
<td vAlign=top width=164>
<div>T5:=T3*T4</div></td>
<td vAlign=top width=164>
<div>MUL R0,R1</div></td>
<td vAlign=top width=164>
<div>R1含T4</div>
<div>R0 含T5</div></td>
<td vAlign=top width=164>
<div>T4在R1</div>
<div>T2在内存</div>
<div>T5在R0</div></td></tr>
<tr>
<td vAlign=top width=164>
<div>W:=T2/T5</div></td>
<td vAlign=top width=164>
<div>LD R1,T2</div>
<div>DIV R1,R0</div>
<div>ST R1, W</div></td>
<td vAlign=top width=164>
<div>R0 含T5</div>
<div>R1含W</div></td>
<td vAlign=top width=164>
<div>T5在R0</div>
<div>W在内存和R1</div></td></tr></table></P>
<div> </div>
<div>2.对以下中间代码序列:</div>
<div> T1:=A+B</div>
<div> T2:=T1-C</div>
<div> T3:=D+E</div>
<div> T3:=T2*T3</div>
<div> T4:=T1+T3</div>
<div> T5:=T3-E</div>
<div> F:=T4*T5</div>
<div> (1)应用DAG结点排序算法重新排序;</div>
<div>(2)假设可用寄存器为R0,F是基本块出口处的活跃变量,应用简单代码生成算法分别生成排序前后的中间代码序列的目标代码,并比较其优劣。</div>
<div>解答:</div>
<div>(1)设原中间代码序列为G,则G的DAG图为:</div>
<P>
<table cellSpacing=0 cellPadding=0 width="100%">
<tr>
<td>
<div v:shape="_x0000_s1203">
<div>F</div></div></td></tr></table>
<table cellSpacing=0 cellPadding=0 width="100%">
<tr>
<td>
<div>
<div><SUP>n7</SUP></div></div></td></tr></table>
<table cellSpacing=0 cellPadding=0 width="100%">
<tr>
<td>
<div>
<div><B><SUB>*</SUB></B></div></div></td></tr></table> </P>
<div> </div>
<P>
<table cellSpacing=0 cellPadding=0 width="100%">
<tr>
<td>
<div>
<div> </div></div></td></tr></table>
<table cellSpacing=0 cellPadding=0 width="100%">
<tr>
<td>
<div>
<div><SUB>A0</SUB></div></div></td></tr></table>
<table cellSpacing=0 cellPadding=0 width="100%">
<tr>
<td>
<div>
<div> </div></div></td></tr></table>
<table cellSpacing=0 cellPadding=0 width="100%">
<tr>
<td>
<div>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -