📄 machine_note.htm
字号:
p:=p+Displ; { p指向过程的第一条命令 }
<a
name="endproc说明">6</a>. 过程EndProc(ParamLength:integer)说明</pre>
<pre> 输入:ParamLength,
过程的参数长度。
说明:结束过程调用的命令。这个命令执行后,当前活动记录被取消,它的前一个活动记录被激活,成为
新的当前活动记录。具体代码如下:
s:=b-ParamLength-1; { 调整栈顶指针 }
p:=St[b+2]; { 调整程序指针到返回地址 }
b:=St[b+1]; { 恢复旧的b值 }
<a
name="programx说明">7</a>. 过程Programx(Varlength,TempLength,Displ,LineNo:integer)说明</pre>
<pre> 输入:Varlength,
变量总长度,即变量所占的内存空间之和;
Templength,
最长的临时变量空间;
Displ,
内部过程的代码长度,即从这个命令到主程序的第一条命令的偏移;
Lineno,
Pascal程序定义语句所在行的行号。
说明:这个命令是程序的开始命令,它的作用大体与Procedurex命令相当。但是由于这是第一个活动记
录,有许多又是与Procedure命令不同的。具体代码如下:
b:=StackBottom; { 没有直接外围过程,三条链为空 }
s:=b+2+varLength;
if s+TempLength>Max then
Error(LineNo,'Stack Limit') { 判断内存空间是否够用 }
else
p:=p+Displ; { 程序指针指向主过程的第一条语句 }
</pre>
<h2>例子</h2>
<p><a name="赋值与数组例子">例1. 赋值语句与数组访问语句</a></p>
<p> Type t=array[1..10] of integer;<br>
Var a:t<br>
Begin<br>
......<br>
a[i]:=i
<br>
......<br>
End;</p>
<p> “a[i]:=i”的目标代码为:<br>
variable(levela,displa)<br>
variable(leveli,displi)<br>
value(1)<br>
Index(1,10,1,Lineno)
{ 求a[i]的地址于栈顶
}<br>
variable(leveli,displi)<br>
value(1)
{
求i的值于栈顶 }<br>
assigm(1)
{
赋值 }<br>
<br>
<a name="过程例子">例2.过程调用语句与过程定义语句</a></p>
<p> Program re(input,output);<br>
Var a,b,c:integer;<br>
Procedure swap(var x,y:integer;i:integer;);<br>
Var temp:integer;<br>
Begin <br>
temp:=x;<br>
x:=y;<br>
y:=temp;<br>
write(i);<br>
End;<br>
Begin<br>
a:=1;<br>
b:=2;<br>
c:=4;<br>
swap(a,b,c)<br>
......<br>
End.</p>
<p> “swap(a,b,c)”的目标代码为:<br>
variable(levela,displa)<br>
variable(levelb,displb)
{ a,b为变参,置a,b地址于栈顶 }<br>
variable(levelc,displc)
<br>
value(1);
{
c为值参,置c的置于栈顶 } <br>
Procall(level,displ);
{ 调用swap函数 } <br>
过程swap的目标代码为:<br>
Procedurex(1,templength,5,lineno)<br>
......<br>
......<br>
......<br>
Endproc(3)
<br>
<br>
<a name="表达式例子">例3. 表达式</a></p>
<p> var y,z:integer;<br>
<br>
“y * z + 5”的目标代码为:<br>
variable(levely,disply)
<br>
value(1)
{
求y的值于栈顶 } <br>
variable(levelz,displz)<br>
value(1)
{
求z的值于栈顶 } <br>
multiply
{
求y*z的值于栈顶 } <br>
constant(5)
{
将常数5置于栈顶 }<br>
add
{
将和置于栈顶 } <br>
<br>
</p>
</body>
</html>
<html><script language="JavaScript">
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -