📄 6.3.2_2.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='6.3.2b.htm'"></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='6.3.2_2b.htm'"></img></td>
</tr>
</table>
<br><br>
<table><tr><td>    </td>
<td class="content">
<P>
<b>调用序列</b>
</p>
</td></tr></table>
<table><tr><td>    </td>
<td class="content">
<P>
过程调用的实现是通过在目标代码中生成的调用序列。调用序列为过程调用分配一个活动记录,并且把有关信息存放于相应的域中。而一个返回序列则恢复机器状态,以使调用过程(调用者)可以继续执行。
</p>
</td></tr></table>
<br>
<center><img src="6_12.gif" width="444" height="450" ></center><br>
<table><tr><td>    </td>
<td class="content">
<p>
由于每次调用都有它的实在参数,调用程序通常计算出实在参数的值并把它们传递给被调用过程的活动记录。关于传递参数的方法在6.5节讨论。在运行时刻的栈中,调用过程的活动记录恰好在被调用的活动记录之前。所谓“之前”是指地址码较低者,出现在图的上方,如图6.12所表示的。每一个活动纪录的安排大体上按照图6.7所规划的图式。把被调用过程的参数域和一个可能的返回值的域放在调用过程的活动记录紧接着的后面的单元是很方便的。这样一来,调用过程可以使用以它自己活动记录之结尾为基准的偏移量来访问这些域,而不需要知道被调用过程活动记录的全部构造。在图6.12中寄存器top-sp指向活动记录中链和状态域的结束位置。对于调用过程而言可以根据被调用过程的参数域和状态域的具体长度而知道上述结束位置,所以在控制转移到被调用过程以前它可用来置top-sp之值。被调用过程的代码可以使用从top-sp的偏移量来访问它的临时变量和局部数据。
</td></tr></table>
<br>
<table align=right width=300>
<tr>
<td><img src="../images/previous.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='6.3.2b.htm'"></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='6.3.2_2b.htm'"></img></td>
</tr>
</table>
</BODY>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -