First Example
This is a simple procedure call in which the parameters are computed and stored in locations local to the procedure call
1 var 2 x,y; 3 procedure p(x,u); 4 var 5 t; 6 t:= x+u; 7 begin 8 x:= 1; 9 y:=2; 10 p(2*x+1,y) 11 end. Compile successful...no errors! Object code for this program is step fun lev add 0 jmp 0 8 1 jmp 0 2 2 int 0 6 3 lod 0 3 4 lod 0 4 5 opr 0 2 6 sto 0 5 7 opr 0 0 8 int 0 5 9 lit 0 1 10 sto 0 3 11 lit 0 2Compute the parameter values and store in local stack area
12 sto 0 4 13 inb 0 0 14 int 0 5 15 lit 0 2 16 lod 1 3 17 opr 0 4 18 lit 0 1 19 opr 0 2 20 sto 0 3 21 lod 1 4 22 sto 0 4 23 deb 0 0 24 cal 0 2 25 opr 0 0 After step number 0 After step number 8 Base-> 1 0 2 0 3 0 4 0 Top-> 5 0 After step number 9 Base-> 1 0 2 0 3 0 4 0 5 0 Top-> 6 1 After step number 10 1 Base-> 1 0 2 0 3 0 4 1 Top-> 5 0 After step number 11 Base-> 1 0 2 0 3 0 4 1 5 0 Top-> 6 2 After step number 12 2 Base-> 1 0 2 0 3 0 4 1 Top-> 5 2 After step number 13 1 0 2 0 3 0 4 1 Top-> 5 2 ***************************************************** During the run **************************************************** After step number 14 1 0 2 0 3 0 4 1 5 2 Base-> 6 1 7 1 8 0 9 0 Top-> 10 0 After step number 15 1 0 2 0 3 0 4 1 5 2 Base-> 6 1 7 1 8 0 9 0 10 0 Top-> 11 2 After step number 16 1 0 2 0 3 0 4 1 5 2 Base-> 6 1 7 1 8 0 9 0 10 0 11 2 Top-> 12 1 After step number 17 1 0 2 0 3 0 4 1 5 2 Base-> 6 1 7 1 8 0 9 0 10 0 Top-> 11 2 After step number 18 1 0 2 0 3 0 4 1 5 2 Base-> 6 1 7 1 8 0 9 0 10 0 11 2 Top-> 12 1 After step number 19 1 0 2 0 3 0 4 1 5 2 Base-> 6 1 7 1 8 0 9 0 10 0 Top-> 11 3 After step number 20 3 1 0 2 0 3 0 4 1 5 2 Base-> 6 1 7 1 8 0 9 3 Top-> 10 0 After step number 21 1 0 2 0 3 0 4 1 5 2 Base-> 6 1 7 1 8 0 9 3 10 0 Top-> 11 2 After step number 22 2 1 0 2 0 3 0 4 1 5 2 Base-> 6 1 7 1 8 0 9 3 Top-> 10 2 After step number 23 Base-> 1 0 2 0 3 0 4 1 Top-> 5 2 After step number 24 1 0 2 0 3 0 4 1 Top-> 5 2 After step number 2 1 0 2 0 3 0 4 1 5 2 Base-> 6 1 7 1 8 25 9 3 10 2 Top-> 11 2 After step number 3 1 0 2 0 3 0 4 1 5 2 Base-> 6 1 7 1 8 25 9 3 10 2 11 2 Top-> 12 3 After step number 4 1 0 2 0 3 0 4 1 5 2 Base-> 6 1 7 1 8 25 9 3 10 2 11 2 12 3 Top-> 13 2 After step number 5 1 0 2 0 3 0 4 1 5 2 Base-> 6 1 7 1 8 25 9 3 10 2 11 2 Top-> 12 5 After step number 6 5 1 0 2 0 3 0 4 1 5 2 Base-> 6 1 7 1 8 25 9 3 10 2 Top-> 11 5 After step number 7 Base-> 1 0 2 0 3 0 4 1 Top-> 5 2 After step number 25Second Example
This example shows how the dynamic and static links are created for nested procedures.
1 var 2 x, y; 3 procedure p(u,x); 4 var 5 w; 6 procedure p1(); 7 x:=u + w +y; 8 procedure p2(); 9 p1(); 10 p2(); 11 p(1,2). Compile successful...no errors! Object code for this program is step fun lev add 0 jmp 0 18 1 jmp 0 15 2 jmp 0 3 3 int 0 3
| 4 lod 1 3 |