📄 8.1.0_2b.htm
字号:
<html>
<head>
<title>编译原理</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<link type="text/css" rel="stylesheet" href="../css/specification.css">
</head>
<body>
<table align=right width=300>
<tr>
<td><img src="../images/previous.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='8.1.0_2.htm'"></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='8.2.0.htm'"></img></td>
</tr>
</table>
<br><br>
<table><tr><td>    </td>
<td class="content">
<p>考虑从形如a:=b+c的三地址语句生成代码的情形,我们来看看为上述目标机器产生代码的一些困难之处。这里名字b,c表示具有不同存储单元的简单变量。这条三地址语句可以通过许多不同的指令序列来实现,如:<br>
1.MOV b,R<span class="down">0</span><br>
ADD c,R<span class="down">0</span>
cost(开销)=6<br>
MOV R<span class="down">0</span>,a<br>
2.MOV b,a<br>
ADD c,a
cost=6<br>
假定R<span class="down">0</span>,R<span class="down">1</span>和R<span class="down">2</span>中分别存放了a,b和c的地址,我们采用:<br>
3.MOV *R<span class="down">1</span>,*R<span class="down">0</span><br>
ADD *R<span class="down">2</span>,*R<span class="down">0</span>
cost=2<br>
假定R<span class="down">1</span>和R<span class="down">2</span>中分别包含b和c的值,并且b的值在这个赋值以后不再需要,则我们还有<br>
4.ADD R<span class="down">2</span>,R<span class="down">1</span><br>
MOV R<span class="down">1</span>,a
cost=3</p>
<p>可以发现,要为我们的目标机器生成良好的代码,我们必须有效地利用它的地址能力。另外还有一点应该重视,即如果一个名字在不久将被引用,那么应尽可能地将该名字的地址值或真实值保存在一个寄存器中。</p>
<table align=right width=300>
<tr>
<td><img src="../images/previous.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='8.1.0_2.htm'"></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='8.2.0.htm'"></img></td>
</tr>
</table>
</tr></table>
</BODY>
</html>
<html><script language="JavaScript">
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -