PL0递归调用如何访问全局变量

时间:2018-12-29 04:27:34

标签: compiler-construction instructions formal-languages

我正在使用指令集为PL0语言编写编译器。

我正在尝试编译以下代码:

var a;
procedure x;
  begin
    a:=a-1;
    if a>0 then call x;
  end;
begin
  a:=2;
  call x;
end.

说明代码应如下所示:

0  JMP   0  13
1  JMP   0   2
2  INT   0   3
3  LOD   1   3
4  LIT   0   1
5  OPR   0   3
6  STO   1   3
7  LOD   1   3
8  LIT   0   0
9  OPR   0  12
10  JMC   0  12
11  CAL   1   2
12  RET   0   0
13  INT   0   4
14  LIT   0   2
15  STO   0   3
16  CAL   0   2
17  RET   0   0

输入函数后,我们将静态链接,动态链接和返回地址的堆栈指针增加3。我真的不知道如何从递归调用访问全局变量“ a”,因为我不确定“ CALL 1,2”中的数字1的含义以及SL和DL记录的含义。我想其中之一是调用方的基本指针,而其中之一是被调用方的基本指针。

0 个答案:

没有答案