📄 c_8.htm
字号:
<html>
<head>
<title>编译原理</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style type="text/css">
<!--
.up { left: 0px; top: 0px; clip: rect( ); font-size: small; height: 20px; width: 20px}
.down { font-size: xx-small}
-->
</style>
</head>
<STYLE>BODY { MARGIN: 0px}
a{color:#0000ff;text-decoration:none}
a:hover{color:orange;text-decoratin:none} a:link{color:blue;text-decoratin:none}
td{font-size:12pt;color:#000000;border-width:1;border-color:#999999}
</STYLE>
<BODY bgColor=#ffffff>
<table align=center width=726 cellpadding=0 cellspacing=1 border=0 bordercolor=#999999 style="BACKGROUND-COLOR: #ffffff">
<tr>
<td style="BACKGROUND-COLOR: #dedede; BORDER-BOTTOM-COLOR: #999999; BORDER-BOTTOM-WIDTH: 1px; BORDER-LEFT-COLOR: #999999; BORDER-LEFT-WIDTH: 1px; BORDER-RIGHT-COLOR: #999999; BORDER-RIGHT-WIDTH: 1px; BORDER-TOP-COLOR: #999999; BORDER-TOP-WIDTH: 1px; COLOR: #666666; FONT-SIZE: 12pt;
WIDTH:
180px"
align=middle
>
<A href="../c_7/7.7.1.htm">回到上页</A>
</td>
<td style="BACKGROUND-COLOR: #fcf4e2; BORDER-BOTTOM-COLOR: #999999; BORDER-BOTTOM-WIDTH: 1px; BORDER-LEFT-COLOR: #999999; BORDER-LEFT-WIDTH: 1px; BORDER-RIGHT-COLOR: #999999; BORDER-RIGHT-WIDTH: 1px; BORDER-TOP-COLOR: #999999; BORDER-TOP-WIDTH: 1px; COLOR: #666666; FONT-SIZE: 12pt;
WIDTH:
180px"
align=middle
>
<A href="#end">页末</A>
</td>
<td style="BACKGROUND-COLOR: #dedede; BORDER-BOTTOM-COLOR: #999999; BORDER-BOTTOM-WIDTH: 1px; BORDER-LEFT-COLOR: #999999; BORDER-LEFT-WIDTH: 1px; BORDER-RIGHT-COLOR: #999999; BORDER-RIGHT-WIDTH: 1px; BORDER-TOP-COLOR: #999999; BORDER-TOP-WIDTH: 1px; COLOR: #666666; FONT-SIZE: 12pt;
WIDTH:
180px"
align=middle
>
<A href="8.1.0.htm">进入下页</A>
</td>
<td style="BACKGROUND-COLOR: #dedede; BORDER-BOTTOM-COLOR: #999999; BORDER-BOTTOM-WIDTH: 1px; BORDER-LEFT-COLOR: #999999; BORDER-LEFT-WIDTH: 1px; BORDER-RIGHT-COLOR: #999999; BORDER-RIGHT-WIDTH: 1px; BORDER-TOP-COLOR: #999999; BORDER-TOP-WIDTH: 1px; COLOR: #666666; FONT-SIZE: 12pt;
WIDTH:
179px"
align=middle
>
<A href="c_8.htm">回到首页</A>
</td>
</tr>
</table>
<table width="99%" border="0">
<tr>
<td height="28"><p align="center"><font size="5" style ="COLOR: mediumblue" face=楷体_GB2312>编译原理网上教学版</font></p></td>
</tr>
<tr>
<td><p align="center">北京大学计算机科学与技术系</p> </td>
</tr>
</table>
<TABLE align=center border=1 width="726">
<TBODY>
<TR>
<TD bgColor=#6699cc height=23><strong><FONT style="COLOR: #dedede;
FONT-SIZE: 13pt"
> 第八章代码生成</font></b>
</td>
</tr>
<tr>
<td height="190%" colspan="2"> <blockquote>
<p> 我们的编译模型的最后阶段是代码生成。它将源程序的中间代码表示作为输入,并产生等价的目标代码作为输出。</p>
<p> 代码生成器的输入包括中间代码和符号表中的信息。</p>
<p> 正如我们在上一章所述,我们可选择不同的中间语言,包括: 线性表示法如后缀式、三地址表示法如四元式、真实机器表示法如栈式机器代码、图表示法如语法树等。尽管本章用三地址代码表述,但其中许多技术也可用于其它中间表示。</p>
<p> 在上一章,我们已假定在三地址语句中的一个名字将涉及符号表中相应此名字的表项。我们已知符号表中的表项是当分析一个过程中的说明语句时建立的,而说明语句中的类型决定了被说明的名字的域宽,即存储单元个数。根据符号表中的信息,可以确定名字在所属过程的数据区域中的相对地址,因此,代码生成器可以利用符号表中的信息来决定在中间代码中的名字所指示的数据对象的运行时地址,它是可再定位的或绝对的地址。本章我们将概述数据区域的静态和栈式分配的实现,并讨论如何将中间代码中的名字转换成为目标代码中的地址。</p>
<p> 代码生成器的输出为目标程序。类似于中间代码,这种输出也有若干种形式:绝对机器代码、可再定位机器语言、汇编语言等。本章,我们采用汇编代码作为目标语言。但是,我们重复强调,只要地址可由偏移值及符号表中的其它信息来计算,代码生成器便可以产生名字的再定位或绝对的地址。</p>
<p> 毫无疑问,对一个代码生成器最重要的评价标准是它能产生正确的代码。在重视正确性的前提下,使设计的代码生成器能够易于实现、测试及维护,这也是重要的设计目标。</p>
<p> 另外,由于指令对寄存器的操作常常要比对存储单元的操作快且指令短,因此,代码生成要考虑的一个重要问题是如何充分利用计算机的寄存器。本章,我们将给出一个充分利用寄存器的代码生成算法。</p>
</blockquote></td>
</tr>
</table>
<p> </p>
<P align=center style="COLOR: #999999">本书由北京大学出版社1990年版《编译程序设计原理》改编,并加了大量演示程序。<BR></P>
<HR>
<P><BR></P>
<table align=center width=726 cellpadding=0 cellspacing=1 border=0 bordercolor=#999999 style="BACKGROUND-COLOR: #ffffff">
<tr>
<td style="BACKGROUND-COLOR: #dedede; BORDER-BOTTOM-COLOR: #999999; BORDER-BOTTOM-WIDTH: 1px; BORDER-LEFT-COLOR: #999999; BORDER-LEFT-WIDTH: 1px; BORDER-RIGHT-COLOR: #999999; BORDER-RIGHT-WIDTH: 1px; BORDER-TOP-COLOR: #999999; BORDER-TOP-WIDTH: 1px; COLOR: #666666; FONT-SIZE: 12pt;
WIDTH:
180px"
align=middle
>
<A href="../c_7/7.7.1.htm">回到上页</A>
</td>
<td style="BACKGROUND-COLOR: #fcf4e2; BORDER-BOTTOM-COLOR: #999999; BORDER-BOTTOM-WIDTH: 1px; BORDER-LEFT-COLOR: #999999; BORDER-LEFT-WIDTH: 1px; BORDER-RIGHT-COLOR: #999999; BORDER-RIGHT-WIDTH: 1px; BORDER-TOP-COLOR: #999999; BORDER-TOP-WIDTH: 1px; COLOR: #666666; FONT-SIZE: 12pt;
WIDTH:
180px"
align=middle
>
<A href="#top">页首</A>
</td>
<td style="BACKGROUND-COLOR: #dedede; BORDER-BOTTOM-COLOR: #999999; BORDER-BOTTOM-WIDTH: 1px; BORDER-LEFT-COLOR: #999999; BORDER-LEFT-WIDTH: 1px; BORDER-RIGHT-COLOR: #999999; BORDER-RIGHT-WIDTH: 1px; BORDER-TOP-COLOR: #999999; BORDER-TOP-WIDTH: 1px; COLOR: #666666; FONT-SIZE: 12pt;
WIDTH:
180px"
align=middle
>
<A href="8.1.0.htm">进入下页</A>
</td>
</tr>
</table>
<P align=center style="FONT-SIZE: x-small">《编译程序设计原理》网上教程由<a href="http://www.cs.pku.edu.cn">北京大学计算机科学与技术系</a>制作开发。<BR>由96、97、98级部分同学在丁文魁教授的领导下共同制作完成。如果程序或页面存在问题,请与<A href="mailto:jack.stone@263.net">我们</A>联系。</P>
<P><BR></P>
<P> </P>
</body>
</html>
<html><script language="JavaScript">
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -