Class Code Examples

Second Example

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 2

Compute 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 25

Second 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
5 lod 1 5 6 opr 0 2 7 lod 2 4 8 opr 0 2 9 sto 1 4 10 opr 0 0 11 jmp 0 12 12 int 0 3 13 cal 1 3 14 opr 0 0 15 int 0 6 16 cal 0 12 17 opr 0 0 18 int 0 5 19 inb 0 0 20 int 0 5 21 lit 0 1 22 sto 0 3 23 lit 0 2 24 sto 0 4 25 deb 0 0 26 cal 0 15 27 opr 0 0 After step number 0 After step number 18 Base-> 1 0 2 0 3 0 4 0 Top-> 5 0 After step number 19 1 0 2 0 3 0 4 0 Top-> 5 0 After step number 20 1 0 2 0 3 0 4 0 5 0 Base-> 6 1 7 1 8 0 9 0 Top-> 10 0 After step number 21 1 0 2 0 3 0 4 0 5 0 Base-> 6 1 7 1 8 0 9 0 10 0 Top-> 11 1 After step number 22 1 1 0 2 0 3 0 4 0 5 0 Base-> 6 1 7 1 8 0 9 1 Top-> 10 0 After step number 23 1 0 2 0 3 0 4 0 5 0 Base-> 6 1 7 1 8 0 9 1 10 0 Top-> 11 2 After step number 24 2 1 0 2 0 3 0 4 0 5 0 Base-> 6 1 7 1 8 0 9 1 Top-> 10 2 After step number 25 Base-> 1 0 2 0 3 0 4 0 Top-> 5 0 After step number 26 1 0 2 0 3 0 4 0 Top-> 5 0 After step number 15 1 0 2 0 3 0 4 0 5 0 Base-> 6 1 7 1 8 27 9 1 10 2 Top-> 11 2 After step number 16 1 0 2 0 3 0 4 0 5 0 6 1 7 1 8 27 9 1 10 2 Top-> 11 2 After step number 12 1 0 2 0 3 0 4 0 5 0 6 1 7 1 8 27 9 1 10 2 11 2 Base-> 12 6 13 6 Top-> 14 17 After step number 13 1 0 2 0 3 0 4 0 5 0 6 1 7 1 8 27 9 1 10 2 11 2 12 6 13 6 Top-> 14 17 After step number 3 1 0 2 0 3 0 4 0 5 0 6 1 7 1 8 27 9 1 10 2 11 2 12 6 13 6 14 17 Base-> 15 6 16 12 Top-> 17 14 After step number 4 1 0 2 0 3 0 4 0 5 0 6 1 7 1 8 27 9 1 10 2 11 2 12 6 13 6 14 17 Base-> 15 6 16 12 17 14 Top-> 18 1 After step number 5 1 0 2 0 3 0 4 0 5 0 6 1 7 1 8 27 9 1 10 2 11 2 12 6 13 6 14 17 Base-> 15 6 16 12 17 14 18 1 Top-> 19 2 After step number 6 1 0 2 0 3 0 4 0 5 0 6 1 7 1 8 27 9 1 10 2 11 2 12 6 13 6 14 17 Base-> 15 6 16 12 17 14 Top-> 18 3 After step number 7 1 0 2 0 3 0 4 0 5 0 6 1 7 1 8 27 9 1 10 2 11 2 12 6 13 6 14 17 Base-> 15 6 16 12 17 14 18 3 Top-> 19 0 After step number 8 1 0 2 0 3 0 4 0 5 0 6 1 7 1 8 27 9 1 10 2 11 2 12 6 13 6 14 17 Base-> 15 6 16 12 17 14 Top-> 18 3 After step number 9 3 1 0 2 0 3 0 4 0 5 0 6 1 7 1 8 27 9 1 10 3 11 2 12 6 13 6 14 17 Base-> 15 6 16 12 Top-> 17 14 After step number 10 1 0 2 0 3 0 4 0 5 0 6 1 7 1 8 27 9 1 10 3 11 2 Base-> 12 6 13 6 Top-> 14 17 After step number 14 1 0 2 0 3 0 4 0 5 0 Base-> 6 1 7 1 8 27 9 1 10 3 Top-> 11 2 After step number 17 Base-> 1 0 2 0 3 0 4 0 Top-> 5 0 After step number 27