📄 6.3.2_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='6.3.2_2.htm'"></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='6.3.2_3.htm'"></img></td>
</tr>
</table>
<br><br>
<table><tr><td>    </td>
<td class="content">
<table><tr><td>    </td>
<td class="content">
<p>
下面的调用序列是根据前面的的讨论得到的:
</td></tr></table>
<table><tr><td>    </td>
<td class="content">
<p>
1.调用者对实在参数求值,并把它们传送给被调用过程的活动记录的参数域。
</td></tr></table>
<table><tr><td>    </td>
<td class="content">
<p>
2.调用者在被调用者的活动记录中存放返回地址和老top-sp之值。之后调用者把top一sp之值增加到图6.12所示的位置。即top-sp之值跳过调用者的局部数据和临时变量域和被调用者的参数域和状态域。
</td></tr></table>
<table><tr><td>    </td>
<td class="content">
<p>
3.被调用者存放寄存器值和其它状态信息。
</td></tr></table>
<table><tr><td>    </td>
<td class="content">
<p>
4.被调用者初始化其局部数据并开始执行。
</td></tr></table>
<table><tr><td>    </td>
<td class="content">
<p>
一个可能的返回序列是:
</td></tr></table>
<table><tr><td>    </td>
<td class="content">
<p>
1.被调用者在自己的活动记录的返回值域中放一个返回值。注意,这个域紧接着调用者的活动记录。
</td></tr></table>
<table><tr><td>    </td>
<td class="content">
<p>
2.利用状态域中的信息,被调用者恢复top一sp和其它寄存器,并且按返回地址转移,这个返回地址是在调用者代码之中的。
</td></tr></table>
<table><tr><td>    </td>
<td class="content">
<p>
3.尽管top-sp 的值减小了,调用者可以把返回值复制到自己的活动记录中,并可用它来计算任意一个表达式。
</td></tr></table>
<table><tr><td>    </td>
<td class="content">
<p>
综上所述,调用序列与活动记录不同。一个过程的一次执行对应一个活动记录。而调用序列中的代码经常在调用过程和它所调用的过程之间划分开来。即一部分代码属于调用者责任范围,另一部分化码属于被调用者范围。例如上面介绍的调用序列中共有四项任务;其中前两项是调用者完成的,而后两项任务是被调用者完成的。它们各自的责任范围的粗略表示见图6.12。一般说来,在调用者和被调用者之间的运行时刻的任务没有精确的划分,需根据源语言、目标机器和操作系统等具体情况而定。
</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.2_2.htm'"></td>
<td><img src="../images/next.gif" onmouseover="javascript:style.cursor='hand'" onclick="vbscript:window.location.href='6.3.2_3.htm'"></img></td>
</tr>
</table>
</BODY>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -