📄 pasmar.htm.bak
字号:
<html>
<head>
<meta http-equiv="content-Type" content="text/html; charset=gb2312">
<style>
.unnamed1 { font-family: "宋体"; font-size: 9pt; text-decoration: none; color: #666666}
body { font-family: "宋体", "仿宋_GB2312", "楷体_GB2312"; font-size: 9pt}
tr { font-family: "宋体", "仿宋_GB2312", "楷体_GB2312"; font-size: 9pt}
body {
background-color:#FFFFFF;
SCROLLBAR-FACE-COLOR: #f0f0f0;
SCROLLBAR-HIGHLIGHT-COLOR: #ffffff;
SCROLLBAR-SHADOW-COLOR: #339966;
SCROLLBAR-3DLIGHT-COLOR: #339966;
SCROLLBAR-ARROW-COLOR: #000000;
SCROLLBAR-TRACK-COLOR: #f0f0f0;
SCROLLBAR-DARKSHADOW-COLOR: #ffffff
}
-->
</style>
<title></title>
</head>
<body topmargin="0" leftmargin="0" marginheight="0" marginwidth="0" bgcolor="#FFFFFF" text="#669933" link="#CC3300" bgproperties="fixed" >
<table width="500" border="0" cellpadding="0" cellspacing="5" align="center" height="103">
<tr>
<td align="left" valign="top" height="175" width="692">
<font size="2">
<br>
<b><span lang="EN-US"><br>
</span> </b>
</font> <b> <span lang="EN-US"><font size="3" color="#000080">Pascal计算机</font></span></b>
<p class="MsoPlainText"><font size="3"> <span lang="EN-US"><b>1.
Pascal计算机的内存</b></span></font></p>
<p class="MsoPlainText"><font size="2"> <span lang="EN-US">
Pascal计算机的内存是一个叫做St的整型数组,St的元素和它的索引分别称为字和地址。存储和索引用Pascal语言定义如下:</span></font></p>
<p class="MsoPlainText"><font size="2"> <span lang="EN-US">Const</span></font></p>
<p class="MsoPlainText"><span lang="EN-US"><font size="2"> </font> </span><font size="2"> <span lang="EN-US">min=0;max=8192;</span></font></p>
<p class="MsoPlainText"><font size="2"> <span lang="EN-US">Type</span></font></p>
<p class="MsoPlainText"><span lang="EN-US"><font size="2"> </font> </span><font size="2"> <span lang="EN-US">store
= array[min..max]
of integer;</span></font></p>
<p class="MsoPlainText"><font size="2"> <span lang="EN-US">Var</span></font></p>
<p class="MsoPlainText"><span lang="EN-US"><font size="2"> </font> </span><font size="2"> <span lang="EN-US">st:store;</span></font></p>
<p class="MsoPlainText"><span lang="EN-US"><font size="2"> </font> </span><font size="2"> <span lang="EN-US">p,b,s:integer;</span></font></p>
<p class="MsoPlainText"><font size="2"> 地址为<span lang="EN-US">X的存储单元表示为st[x],p,b,s为寄存器。st的划分和寄存器的使用如图1所示。 <br>
<br>
<img border="0" src="f4.gif" tppabs="http://162.105.30.75/materialroot/ug3/compiler_project/f4.gif" width="449" height="384"> <br>
<img border="0" src="f5.gif" tppabs="http://162.105.30.75/materialroot/ug3/compiler_project/f5.gif" width="449" height="375">
</span></font></p>
<p class="MsoPlainText"><font size="2"> 内存<span lang="EN-US">st是一个栈,当程序激发一个过程时,Pascal计算机为过程中定义的变量在栈中分配空间,当这个过程的活动执行结束后,这些变量从栈中被去掉。</span></font></p>
<p class="MsoPlainText"><font size="2">
整个块中的变量映射到一个栈段,称为一个活动记录(参看图2),它由下面四部分组成:参数部分,上下文(环境)部分,变量部分,临时变量部分。<span lang="EN-US">
</span></font></p>
<p class="MsoPlainText"><font size="2"> 三个寄存器<span lang="EN-US">p,b,s的用途分别为:
</span></font></p>
<p class="MsoPlainText"><span lang="EN-US"><font size="2"> </font> </span><font size="2">
<span lang="EN-US">p为指令计数器,总是指向下一条要执行的指令; </span></font></p>
<p class="MsoPlainText"><span lang="EN-US"><font size="2"> </font> </span><font size="2">
<span lang="EN-US">b为活动记录中用到的指针,指向存取链所在的位置,所有变量(包括值参和变参)的偏移都是相对于相应活动记录的b的;
</span></font></p>
<p class="MsoPlainText"><font size="2"><span lang="EN-US"> </span>
<span lang="EN-US">s为栈顶指针,总是指向st中下标最大的以用单元。 </span></font></p>
<p class="MsoPlainText"><font size="2"> 每个活动记录中都包括了三条链组成的上下文部分。</font></p>
<p class="MsoPlainText"><span lang="EN-US"><font size="2"> </font> </span><font size="2">
<span lang="EN-US">存取链(static link)是用来访问变量的,它指向直接包括当前过程的外围过程的存取链; </span></font></p>
<p class="MsoPlainText"><span lang="EN-US"><font size="2"> </font> </span><font size="2">
<span lang="EN-US">动态链(dynamic
link)是用于过程返回时去掉活动记录,恢复b值的,它设置为这个活动记录的上一个活动记录的b值,即指向调用当前过程的过程的存取链; </span></font></p>
<p class="MsoPlainText"><span lang="EN-US"><font size="2"> </font> </span><font size="2">
<span lang="EN-US">返回地址(return address)是用于过程返回时确定返回地址的,它记录了过程调用语句的下一个语句的地址。
</span></font></p>
<p class="MsoPlainText"><font size="2"> <span lang="EN-US"><b></b></span></font> <span lang="EN-US"><b><font size="3">2.
Pascal计算机的指令系统</font></b></span></p>
<p class="MsoPlainText"><span lang="EN-US"><font size="2"> 命令作用说明</font></span></p>
<p class="MsoPlainText"><span lang="EN-US"><font size="2">
变量访问(用于访问值参和变量): Variable(Level,displ:integer)</font></span></p>
<p class="MsoPlainText"><span lang="EN-US"><font size="2"> 变量访问参数:
Varparam(Level,displ:integer)</font></span></p>
<p class="MsoPlainText"><span lang="EN-US"><font size="2"> 求下标变量地址于栈顶:
Index(lower,upper,length,lineno:integer)</font></span></p>
<p class="MsoPlainText"><span lang="EN-US"><font size="2"> 求记录的域地址于栈顶:
field(displ:integer)</font></span></p>
<p class="MsoPlainText"><span lang="EN-US"><font size="2"> 取常数值于栈顶:
constant(value:integer)</font></span></p>
<p class="MsoPlainText"><span lang="EN-US"><font size="2"> 传送值:value(length:integer)</font></span></p>
<p class="MsoPlainText"><span lang="EN-US"><font size="2"> 逻辑非:
notx</font></span></p>
<p class="MsoPlainText"><span lang="EN-US"><font size="2"> 整数乘:multiply</font></span></p>
<p class="MsoPlainText"><span lang="EN-US"><font size="2"> 整数除:divide</font></span></p>
<p class="MsoPlainText"><span lang="EN-US"><font size="2"> 取模:modulo</font></span></p>
<p class="MsoPlainText"><span lang="EN-US"><font size="2"> 逻辑与:andx</font></span></p>
<p class="MsoPlainText"><span lang="EN-US"><font size="2"> 一元负: minus</font></span></p>
<p class="MsoPlainText"><span lang="EN-US"><font size="2"> 整数加:add</font></span></p>
<p class="MsoPlainText"><span lang="EN-US"><font size="2"> 整数减:subtract</font></span></p>
<p class="MsoPlainText"><span lang="EN-US"><font size="2"> 逻辑或:orx</font></span></p>
<p class="MsoPlainText"><span lang="EN-US"><font size="2"> 小于:less</font></span></p>
<p class="MsoPlainText"><span lang="EN-US"><font size="2"> 等于:equal</font></span></p>
<p class="MsoPlainText"><span lang="EN-US"><font size="2"> 大于:greater</font></span></p>
<p class="MsoPlainText"><span lang="EN-US"><font size="2"> 不大于:notgreater</font></span></p>
<p class="MsoPlainText"><span lang="EN-US"><font size="2"> 不等于:notequal</font></span></p>
<p class="MsoPlainText"><span lang="EN-US"><font size="2"> 不小于:notless</font></span></p>
<p class="MsoPlainText"><span lang="EN-US"><font size="2"> 读一个整数:readx</font></span></p>
<p class="MsoPlainText"><span lang="EN-US"><font size="2"> 写一个整数:writeintx</font></span></p>
<p class="MsoPlainText"><span lang="EN-US"><font size="2"> 写一个布尔值:writebooleanx</font></span></p>
<p class="MsoPlainText"><span lang="EN-US"><font size="2"> 过程调用:Proccall(level,displ:integer)</font></span></p>
<p class="MsoPlainText"><span lang="EN-US"><font size="2"> 赋值:Assigm(length:integer)</font></span></p>
<p class="MsoPlainText"><span lang="EN-US"><font size="2"> 条件转移:dox(displ:integer)</font></span></p>
<p class="MsoPlainText"><span lang="EN-US"><font size="2"> 无条件转移:gotox(displ:integer)</font></span></p>
<p class="MsoPlainText"><span lang="EN-US"><font size="2"> 过程开始:Procedurex(varlength,templength,displ,lineno:integer)</font></span></p>
<p class="MsoPlainText"><span lang="EN-US"><font size="2"> 过程结束:endproc(paramlength:integer)</font></span></p>
<p class="MsoPlainText"><span lang="EN-US"><font size="2"> 程序开始:Programx(Varlength,templenth,displ,Lineno:integer)</font></span></p>
<p class="MsoPlainText"><span lang="EN-US"><font size="2"> 程序结束:Endprog</font></span></p>
<p class="MsoNormal"><span style="font-family: 宋体"><font size="2">
下面是为优化编译提供的指令:</font></span></p>
<p class="MsoNormal"><span style="font-family: 宋体"><font size="2">
访问当前层变量:</font></span><font size="2"><span lang="EN-US">Localvar(displ:integer)<br>
<br>
</span> 取当前层值与栈顶:<span lang="EN-US">Localvalue(displ:integer)</span><br>
<span lang="EN-US"><br>
</span><span style="font-family: 宋体">
访问非局部变量:</span><span lang="EN-US">Variable(displ:integer)<br>
<br>
取一个值:Simplevalue</span><span style="font-family: 宋体"><br>
<br>
简单赋值:</span><span lang="EN-US">Simpleassign</span><span style="font-family: 宋体"><br>
<br>
</span>Pascal计算机的解释程序和具体的计算机语言系统有关,本教材给出的解释程序用Pascal描述。(参看附录)</font></p>
<p class="MsoNormal"><font size="2"> <b></b></font> <b><font size="3">3.目标程序的语法公式由实习者设计给出。</font></b><font size="2"><br>
</font></p>
</td>
</tr>
</table>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -