Recitation 2 PL0 Code Execution COP 3402 Summer

  • Slides: 13
Download presentation
Recitation 2 PL/0 Code Execution COP 3402 (Summer 2013)

Recitation 2 PL/0 Code Execution COP 3402 (Summer 2013)

P-machine ISA opcode 02 - OPR: RTN 0, 0 Return operation (i. e. return

P-machine ISA opcode 02 - OPR: RTN 0, 0 Return operation (i. e. return from subroutine) OPR OPR 0, 1 0, 2 0, 3 0, 4 0, 5 0, 6 0, 7 NEG ( - stack[sp] ) ADD (sp sp – 1 and stack[sp] + stack[sp + 1]) SUB (sp sp – 1 and stack[sp] - stack[sp + 1]) MUL (sp sp – 1 and stack[sp] * stack[sp + 1]) DIV (sp sp – 1 and stack[sp] div stack[sp + 1]) ODD (stack[sp] stack mod 2) or ord(odd(stack[sp])) MOD (sp sp – 1 and stack[sp] mod stack[sp + 1]) OPR OPR OPR 0, 8 EQL 0, 9 NEQ 0, 10 LSS 0, 11 LEQ 0, 12 GTR 0, 13 GEQ (sp sp – 1 and stack[sp] = =stack[sp + 1]) (sp sp – 1 and stack[sp] != stack[sp + 1]) (sp sp – 1 and stack[sp] <= stack[sp + 1]) (sp sp – 1 and stack[sp] >= stack[sp + 1])

opcode 01 - LIT P-machine ISA 0, M sp +1; stack[sp] M; 02 –

opcode 01 - LIT P-machine ISA 0, M sp +1; stack[sp] M; 02 – RTN 0, 0 sp bp -1; pc stack[sp + 3]; bp stack[sp + 2]; 03 – LOD L, M sp +1; stack[sp] stack[ base(L) + M]; 04 – STO L, M stack[ base(L) + M] stack[sp]; sp -1;

opcode P-machine ISA 05 - CAL L, M stack[sp + 1] base(L); stack[sp +

opcode P-machine ISA 05 - CAL L, M stack[sp + 1] base(L); stack[sp + 2] bp; stack[sp + 3] pc bp sp + 1; pc M; 06 – INC 0, M sp + M; 07 – JMP 0, M pc = M; 08 – JPC 0, M if stack[sp] == 0 then { pc M; sp - 1; } 09 – WRT 0, 0 print (stack[sp]); sp – 1; /* static link (SL) /* dynamic link (DL) /* return address (RA)

Nested Code procedure A; var y; procedure B; var x; procedure C; begin x:

Nested Code procedure A; var y; procedure B; var x; procedure C; begin x: =y; end; begin x: =1; y: = 3; call C; end; begin y: = 2; call B; end; call A.

Running Nested on PM/0 Initial values pc 0 bp sp 1 0 stack 000

Running Nested on PM/0 Initial values pc 0 bp sp 1 0 stack 000 0 jmp 20 inc 21 cal 15 inc 16 lit 17 sto 18 cal 8 inc 9 lit 10 sto 11 lit 12 sto 13 cal 4 inc 5 lod 20 21 15 16 17 18 8 9 10 11 12 13 4 5 6 1 1 4 4 8 8 8 12 12 12 000 0 0 0| 1 1 22 0 0 0| 1 1 22 2| 4 4 19 0 0| 1 1 22 2| 4 4 19 0 1 0 0 0| 1 1 22 2| 4 4 19 1 3 0 0 0| 1 1 22 3| 4 4 19 1| 8 8 14 0, 20 0, 3 0, 15 0, 4 0, 2 0, 3 0, 8 0, 4 0, 1 0, 3 1, 3 0, 4 0, 3 2, 3 0 3 3 7 8 7 7 11 12 11 11 14 15 code 0 jmp 0 20 1 jmp 0 15 2 jmp 0 8 3 jmp 0 4 4 inc 0 3 5 lod 2 3 6 sto 1 3 7 opr 0 0 8 inc 0 4 9 lit 0 1 10 sto 0 3 11 lit 0 3 12 sto 1 3 13 cal 0 4 14 opr 0 0 15 inc 0 4 16 lit 0 2 17 sto 0 3 18 cal 0 8 19 opr 0 0 20 inc 0 3 3 21 cal 0 15 22 opr 0 0

Running Nested on PM/0 6 sto 7 opr 14 opr 19 opr 22 opr

Running Nested on PM/0 6 sto 7 opr 14 opr 19 opr 22 opr 1, 3 0, 0 pc 7 14 19 22 0 bp 12 8 4 1 0 sp 14 11 7 3 0 stack 0 0 0| 1 1 22 3| 4 4 19 3| 8 8 14 0 0 0 | 1 1 22 3| 4 4 19 3 0 0 0| 1 1 22 3 000 code 0 jmp 0 20 1 jmp 0 15 2 jmp 0 8 3 jmp 0 4 4 inc 0 3 5 lod 2 3 6 sto 1 3 7 opr 0 0 8 inc 0 4 9 lit 0 1 10 sto 0 3 11 lit 0 3 12 sto 1 3 13 cal 0 4 14 opr 0 0 15 inc 0 4 16 lit 0 2 17 sto 03 18 cal 0 8 19 opr 0 0 20 inc 0 3 21 cal 0 15 22 opr 0 0

Factorial Code var f, n; procedure fact; var answer; begin answer: =n; n: =

Factorial Code var f, n; procedure fact; var answer; begin answer: =n; n: = n-1; if n = 0 then f : = 1; if n > 0 then call fact; f: =f * answer; end; begin n: =3; call fact; write(f); end.

Running Factorial on PM/0 Initial values pc 0 bp sp 1 0 stack 000

Running Factorial on PM/0 Initial values pc 0 bp sp 1 0 stack 000 0 jmp 0, 25 25 inc 0, 5 26 lit 0, 3 27 sto 0, 4 28 cal 0, 2 2 inc 0, 4 3 lod 1, 4 4 sto 0, 3 5 lod 1, 4 6 lit 0, 1 7 opr 0, 3 8 sto 1, 4 9 lod 1, 4 10 lit 0, 0 11 opr 0, 8 25 26 27 28 2 3 4 5 6 7 8 9 10 11 12 1 1 6 6 6 000003 0 0 0 0 3| 1 1 29 0 3 0 0 0 0 3| 1 1 29 3 3 1 0 0 3| 1 1 29 3 2 0 0 0 0 2| 1 1 29 3 2 0 0 0 2| 1 1 29 3 0 0 5 6 5 5 9 10 11 10 code 0 jmp 0 25 1 jmp 0 2 2 inc 0 4 3 lod 1 4 4 sto 0 3 5 lod 1 4 6 lit 0 1 7 opr 0 3 8 sto 1 4 9 lod 1 4 10 lit 0 0 11 opr 0 8 12 jpc 0 15 13 lit 0 1 14 sto 1 3 15 lod 1 4 16 lit 0 0

Running a program on PM/0 Initial values pc 0 bp sp 1 0 stack

Running a program on PM/0 Initial values pc 0 bp sp 1 0 stack 000 12 15 16 17 18 19 2 3 4 5 6 7 8 9 10 11 6 6 6 10 10 10 0 0 0 0 2| 1 1 29 3 2 0 0 0 2| 1 1 29 3 1 0 0 0 0 2| 1 1 29 3| 1 6 20 0 2 0 0 0 0 2| 1 1 29 3| 1 6 20 2 2 1 0 0 2| 1 1 29 3| 1 6 20 2 1 0 0 0 0 1| 1 1 29 3| 1 6 20 2 1 0 jpc 0, 15 lod 1, 4 lit 0, 0 opr 0, 12 jpc 0, 20 cal 1, 2 inc 0, 4 lod 2, 4 sto 0, 3 lod 2, 4 lit 0, 1 opr 0, 3 sto 2, 4 lod 2, 4 lit 0, 0 9 10 11 10 9 9 13 14 15 14 13 14 15 code 17 opr 0 12 18 jpc 0 20 19 cal 1 2 20 lod 1 3 21 lod 0 3 22 opr 0 4 23 sto 1 3 24 opr 0 0 25 inc 0 5 26 lit 0 3 27 sto 0 4 28 cal 0 2 29 lod 0 3 30 wrt 0 0 31 opr 0 0

Running a program on PM/0 Initial values pc 0 bp sp 1 0 stack

Running a program on PM/0 Initial values pc 0 bp sp 1 0 stack 000 11 opr 12 jpc 15 lod 16 lit 17 opr 18 jpc 19 cal 2 inc 3 lod 4 sto 5 lod 6 lit 7 opr 8 sto 9 lod 12 15 16 17 18 19 2 3 4 5 6 7 8 9 10 10 14 14 14 0 0 0 0 1| 1 1 29 3| 1 6 20 2 1 0 0 0 1| 1 1 29 3| 1 6 20 2 1 0 0 0 0 1| 1 1 29 3| 1 6 20 2| 1 10 20 0 1 0 0 0 0 1| 1 1 29 3| 1 6 20 2| 1 10 20 1 0 0 0| 1 1 29 3| 1 6 20 2| 1 10 20 1 0 0, 8 0, 15 2, 4 0, 0 0, 12 0, 20 1, 2 0, 4 3, 4 0, 3 3, 4 0, 1 0, 3 3, 4 14 13 14 15 14 13 13 17 18 19 18 17 18

Running a program on PM/0 Initial values pc 0 bp sp 1 0 stack

Running a program on PM/0 Initial values pc 0 bp sp 1 0 stack 000 10 lit 11 opr 12 jpc 13 lit 14 sto 15 lod 16 lit 17 opr 18 jpc 20 lod 21 lod 22 opr 23 sto 24 opr 20 lod 11 12 13 14 15 16 17 18 20 21 22 23 24 20 21 14 14 14 14 10 10 0 0 0| 1 1 29 3| 1 6 20 2| 1 10 20 1 1 0 0 0 0 0| 1 1 29 3| 1 6 20 2| 1 10 20 1 1 0 0 0 1 0| 1 1 29 3| 1 6 20 2| 1 10 20 1 0 0 0 0 1 0| 1 1 29 3| 1 6 20 2| 1 10 20 1 1 0 0 0 1 0| 1 1 29 3| 1 6 20 2| 1 10 20 1 0 0 0 1 0| 1 1 29 3| 1 6 20 2 1 0, 0 0, 8 0, 15 0, 1 3, 3 3, 4 0, 0 0, 12 0, 20 3, 3 0, 4 3, 3 0, 0 2, 3 19 18 17 18 19 18 17 13 14

Running a program on PM/0 Initial values pc 0 21 lod 22 opr 23

Running a program on PM/0 Initial values pc 0 21 lod 22 opr 23 sto 24 opr 20 lod 21 lod 22 opr 23 sto 24 opr 29 lod 30 wrt 31 opr 22 10 15 23 10 14 24 10 13 20 6 9 21 6 10 22 6 11 23 6 10 24 6 9 29 1 5 30 1 6 31 1 5 0 0, 3 0, 4 2, 3 0, 0 1, 3 0, 4 1, 3 0, 0 bp sp 1 0 stack 000 0 1 0| 1 1 29 3| 1 6 20 2 1 2 0 0 0 1 0| 1 1 29 3| 1 6 20 2 2 0 0 0 2 0| 1 1 29 3| 1 6 20 2 0 0 0 2 0| 1 1 29 3 2 3 0 0 0 2 0| 1 1 29 3 6 0 0 0 6 0| 1 1 29 3 000606 00060