SlideShare una empresa de Scribd logo
1 de 56
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
r1 
r13 
r14 
CPU Registers Memory 
100 
101 
102 
103 
104 
105 
r15 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
Follow the line numbers below to stay on track... 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
r1 3 
r13 
r14 
CPU Registers Memory 
100 
101 
102 
103 
104 
105 
r15 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
Follow the line numbers below to stay on track... 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
r1 3 
r13 
r14 
CPU Registers Memory 
100 
101 
102 
103 
104 
105 
r15 100 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
r15 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
Follow the line numbers below to stay on track... 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
3 
CPU Registers Memory 
??? 
r1 
r13 
r14 
100 
101 
102 
103 
104 
105 
r15 100 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
r15 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
Follow the line numbers below to stay on track... 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
3 
03 
r1 
r13 
r14 
CPU Registers Memory 
100 
101 
102 
103 
104 
105 
r15 100 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
r15 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
Follow the line numbers below to stay on track... 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
3 
03 
r1 
r13 
r14 
CPU Registers Memory 
100 
101 
102 
103 
104 
105 
r15 100 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
r15 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
Follow the line numbers below to stay on track... 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
3 
03 
r1 
r13 
r14 
CPU Registers Memory 
100 
101 
102 
103 
104 
105 
r15 100 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
r15 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
Follow the line numbers below to stay on track... 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
3 
03 
r1 
r13 
r14 
CPU Registers Memory 
100 
101 
102 
103 
104 
105 
r15 100 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
r15 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
Follow the line numbers below to stay on track... 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
3 
03 
r1 
r13 
r14 
CPU Registers Memory 
100 
101 
102 
103 
104 
105 
r15 100,101 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
r15 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
Follow the line numbers below to stay on track... 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
3 
03 
r1 
r13 
r14 
CPU Registers Memory 
100 
101 
102 
103 
104 
105 
r15 100,101 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
r15 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
Follow the line numbers below to stay on track... 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
3 
03 
r1 
r13 
r14 
CPU Registers Memory 
3 
100 
101 
102 
103 
104 
105 
r15 100,101 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
r15 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
Follow the line numbers below to stay on track... 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
3 
03 
r1 
r13 
r14 
CPU Registers Memory 
3 
100 
101 
102 
103 
104 
105 
r15 100,101,102 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
r15 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
Follow the line numbers below to stay on track... 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
3 
03 
r1 
r13 
r14 
CPU Registers Memory 
3 
03 
100 
101 
102 
103 
104 
105 
r15 100,101,102 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
Follow the line numbers below to stay on track... 
r15 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
CPU Registers Memory 
3, 2 
03 
r1 
r13 
r14 
3 
03 
100 
101 
102 
103 
104 
105 
r15 100,101,102 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
Follow the line numbers below to stay on track... 
r15 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
CPU Registers Memory 
3,2 
03 
r1 
r13 
r14 
3 
03 
100 
101 
102 
103 
104 
105 
r15 100,101,102 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
Follow the line numbers below to stay on track... 
r15 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
CPU Registers Memory 
3,2 
03,15 
r1 
r13 
r14 
3 
03 
100 
101 
102 
103 
104 
105 
r15 100,101,102 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
Follow the line numbers below to stay on track... 
r15 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
CPU Registers Memory 
3,2 
03,15 
r1 
r13 
r14 
3 
03 
100 
101 
102 
103 
104 
105 
r15 100,101,102 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
Follow the line numbers below to stay on track... 
r15 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
CPU Registers Memory 
3,2 
03,15 
r1 
r13 
r14 
3 
03 
100 
101 
102 
103 
104 
105 
r15 100,101,102 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
Follow the line numbers below to stay on track... 
r15 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
CPU Registers Memory 
3,2 
03,15 
r1 
r13 
r14 
3 
03 
100 
101 
102 
103 
104 
105 
r15 100,101,102,103 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
Follow the line numbers below to stay on track... 
r15 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
CPU Registers Memory 
3,2 
03,15 
r1 
r13 
r14 
3 
03 
2 
100 
101 
102 
103 
104 
105 
r15 100,101,102,103 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
Follow the line numbers below to stay on track... 
r15 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
CPU Registers Memory 
3,2 
03,15 
r1 
r13 
r14 
3 
03 
2 
100 
101 
102 
103 
104 
105 
100,101,102,103, 
104 
r15 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
Follow the line numbers below to stay on track... 
r15 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
CPU Registers Memory 
3,2 
03,15 
r1 
r13 
r14 
3 
03 
2 
15 
100 
101 
102 
103 
104 
105 
100,101,102,103, 
104 
r15 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
Follow the line numbers below to stay on track... 
r15 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
CPU Registers Memory 
3,2,1 
03,15 
r1 
r13 
r14 
3 
03 
2 
15 
100 
101 
102 
103 
104 
105 
100,101,102,103, 
104 
r15 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
Follow the line numbers below to stay on track... 
r15 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
CPU Registers Memory 
3,2,1 
03,15,15 
r1 
r13 
r14 
3 
03 
2 
15 
100 
101 
102 
103 
104 
105 
100,101,102,103, 
104 
r15 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
Follow the line numbers below to stay on track... 
r15 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
CPU Registers Memory 
3,2,1 
03,15,15 
r1 
r13 
r14 
3 
03 
2 
15 
100 
101 
102 
103 
104 
105 
100,101,102,103, 
104 
r15 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
Follow the line numbers below to stay on track... 
r15 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
CPU Registers Memory 
3,2,1 
03,15,15 
r1 
r13 
r14 
3 
03 
2 
15 
100 
101 
102 
103 
104 
105 
100,101,102,103, 
104,105 
r15 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
Follow the line numbers below to stay on track... 
r15 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
CPU Registers Memory 
3,2,1 
03,15,15 
r1 
r13 
r14 
3 
03 
2 
15 
1 
100 
101 
102 
103 
104 
105 
100,101,102,103, 
104,105 
r15 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
Follow the line numbers below to stay on track... 
r15 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
CPU Registers Memory 
3,2,1 
03,15,15 
r1 
r13 
r14 
3 
03 
2 
15 
1 
100 
101 
102 
103 
104 
105 
100,101,102,103, 
104,105,106 
r15 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
Follow the line numbers below to stay on track... 
r15 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
CPU Registers Memory 
3,2,1 
03,15,15 
r1 
r13 
r14 
3 
03 
2 
15 
1 
100 
101 
102 
103 
104 
105 
100,101,102,103, 
104,105,106 
r15 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
15 
Follow the line numbers below to stay on track... 
r15 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
CPU Registers Memory 
3,2,1,0 
03,15,15 
r1 
r13 
r14 
3 
03 
2 
15 
1 
100 
101 
102 
103 
104 
105 
100,101,102,103, 
104,105,106 
r15 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
15 
Follow the line numbers below to stay on track... 
r15 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
CPU Registers Memory 
3,2,1,0 
03,15,15,15 
r1 
r13 
r14 
3 
03 
2 
15 
1 
100 
101 
102 
103 
104 
105 
100,101,102,103, 
104,105,106 
r15 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
15 
Follow the line numbers below to stay on track... 
r15 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
CPU Registers Memory 
3,2,1,0 
03,15,15,15 
r1 
r13 
r14 
3 
03 
2 
15 
1 
100 
101 
102 
103 
104 
105 
100,101,102,103, 
104,105,106 
r15 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
15 
Follow the line numbers below to stay on track... 
r15 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
CPU Registers Memory 
3,2,1,0 
1 
03,15,15,15 
r1 
r13 
r14 
3 
03 
2 
15 
1 
100 
101 
102 
103 
104 
105 
100,101,102,103, 
104,105,106 
r15 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
15 
Follow the line numbers below to stay on track... 
r15 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
CPU Registers Memory 
3,2,1,0 
1 
03,15,15,15 
r1 
r13 
r14 
3 
03 
2 
15 
1 
100 
101 
102 
103 
104 
105 
100,101,102,103, 
104,105,106 
r15 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
15 
Follow the line numbers below to stay on track... 
r15 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
CPU Registers Memory 
3,2,1,0 
1 
03,15,15,15 
r1 
r13 
r14 
3 
03 
2 
15 
1 
100 
101 
102 
103 
104 
105 
100,101,102,103, 
104,105,106 
r15 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
15 
Follow the line numbers below to stay on track... 
r15 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
CPU Registers Memory 
3,2,1,0 
1 
03,15,15,15 
r1 
r13 
r14 
3 
03 
2 
15 
1 
100 
101 
102 
103 
104 
105 
100,101,102,103, 
104,105,106 
r15 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
15 
Follow the line numbers below to stay on track... 
r15 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
CPU Registers Memory 
3,2,1,0 
1 
03,15,15,15,15 
r1 
r13 
r14 
3 
03 
2 
15 
1 
100 
101 
102 
103 
104 
105 
100,101,102,103, 
104,105,106 
r15 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
15 
Follow the line numbers below to stay on track... 
r15 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
CPU Registers Memory 
3,2,1,0 
1 
03,15,15,15,15 
r1 
r13 
r14 
3 
03 
2 
15 
1 
100 
101 
102 
103 
104 
105 
100,101,102,103, 
104,105,106,105 
r15 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
15 
Follow the line numbers below to stay on track... 
r15 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
CPU Registers Memory 
3,2,1,0,1 
1 
03,15,15,15,15 
r1 
r13 
r14 
3 
03 
2 
15 
1 
100 
101 
102 
103 
104 
105 
100,101,102,103, 
104,105,106,105 
r15 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
15 
Follow the line numbers below to stay on track... 
r15 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
CPU Registers Memory 
3,2,1,0,1 
1 
03,15,15,15,15 
r1 
r13 
r14 
3 
03 
2 
15 
1 
100 
101 
102 
103 
104 
105 
100,101,102,103, 
104,105,106,105, 
104 
r15 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
15 
Follow the line numbers below to stay on track... 
r15 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
CPU Registers Memory 
3,2,1,0,1 
1,1 
03,15,15,15,15 
r1 
r13 
r14 
3 
03 
2 
15 
1 
100 
101 
102 
103 
104 
105 
100,101,102,103, 
104,105,106,105, 
104 
r15 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
15 
Follow the line numbers below to stay on track... 
r15 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
CPU Registers Memory 
3,2,1,0,1 
1,1 
03,15,15,15,15 
r1 
r13 
r14 
3 
03 
2 
15 
1 
100 
101 
102 
103 
104 
105 
100,101,102,103, 
104,105,106,105, 
104 
r15 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
15 
Follow the line numbers below to stay on track... 
r15 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
CPU Registers Memory 
3,2,1,0,1 
1,1 
03,15,15,15,15, 
15 
r1 
r13 
r14 
3 
03 
2 
15 
1 
100 
101 
102 
103 
104 
105 
100,101,102,103, 
104,105,106,105, 
104 
r15 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
15 
Follow the line numbers below to stay on track... 
r15 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
CPU Registers Memory 
3,2,1,0,1 
1,1 
03,15,15,15,15, 
15 
r1 
r13 
r14 
3 
03 
2 
15 
1 
100 
101 
102 
103 
104 
105 
100,101,102,103, 
104,105,106,105, 
104,103 
r15 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
15 
Follow the line numbers below to stay on track... 
r15 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
CPU Registers Memory 
3,2,1,0,1,2 
1,1 
03,15,15,15,15, 
15 
r1 
r13 
r14 
3 
03 
2 
15 
1 
100 
101 
102 
103 
104 
105 
100,101,102,103, 
104,105,106,105, 
104,103 
r15 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
15 
Follow the line numbers below to stay on track... 
r15 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
CPU Registers Memory 
3,2,1,0,1,2 
1,1 
03,15,15,15,15, 
15 
r1 
r13 
r14 
3 
03 
2 
15 
1 
100 
101 
102 
103 
104 
105 
100,101,102,103, 
104,105,106,105, 
104,103,102 
r15 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
15 
Follow the line numbers below to stay on track... 
r15 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
CPU Registers Memory 
3,2,1,0,1,2 
1,1,2 
03,15,15,15,15, 
15 
r1 
r13 
r14 
3 
03 
2 
15 
1 
100 
101 
102 
103 
104 
105 
100,101,102,103, 
104,105,106,105, 
104,103,102 
r15 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
15 
Follow the line numbers below to stay on track... 
r15 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
CPU Registers Memory 
3,2,1,0,1,2 
1,1,2 
03,15,15,15,15, 
15 
r1 
r13 
r14 
3 
03 
2 
15 
1 
100 
101 
102 
103 
104 
105 
100,101,102,103, 
104,105,106,105, 
104,103,102 
r15 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
15 
Follow the line numbers below to stay on track... 
r15 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
CPU Registers Memory 
3,2,1,0,1,2 
1,1,2 
03,15,15,15,15, 
15,03 
r1 
r13 
r14 
3 
03 
2 
15 
1 
100 
101 
102 
103 
104 
105 
100,101,102,103, 
104,105,106,105, 
104,103,102 
r15 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
15 
Follow the line numbers below to stay on track... 
r15 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
CPU Registers Memory 
3,2,1,0,1,2 
1,1,2 
03,15,15,15,15, 
15,03 
r1 
r13 
r14 
3 
03 
2 
15 
1 
100 
101 
102 
103 
104 
105 
100,101,102,103, 
104,105,106,105, 
104,103,102,101 
r15 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
15 
Follow the line numbers below to stay on track... 
r15 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
CPU Registers Memory 
3,2,1,0,1,2,3 
1,1,2 
03,15,15,15,15, 
15,03 
r1 
r13 
r14 
3 
03 
2 
15 
1 
100 
101 
102 
103 
104 
105 
100,101,102,103, 
104,105,106,105, 
104,103,102,101 
r15 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
15 
Follow the line numbers below to stay on track... 
r15 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
CPU Registers Memory 
3,2,1,0,1,2,3 
1,1,2 
03,15,15,15,15, 
15,03 
r1 
r13 
r14 
3 
03 
2 
15 
1 
100 
101 
102 
103 
104 
105 
100,101,102,103, 
104,105,106,105, 
104,103,102,101, 
100 
r15 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
15 
Follow the line numbers below to stay on track... 
r15 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
CPU Registers Memory 
3,2,1,0,1,2,3 
1,1,2,6 
03,15,15,15,15, 
15,03 
r1 
r13 
r14 
3 
03 
2 
15 
1 
100 
101 
102 
103 
104 
105 
100,101,102,103, 
104,105,106,105, 
104,103,102,101, 
100 
r15 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
15 
Follow the line numbers below to stay on track... 
r15 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
CPU Registers Memory 
3,2,1,0,1,2,3 
1,1,2,6 
03,15,15,15,15, 
15,03 
r1 
r13 
r14 
3 
03 
2 
15 
1 
100 
101 
102 
103 
104 
105 
100,101,102,103, 
104,105,106,105, 
104,103,102,101, 
100 
r15 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
15 
Follow the line numbers below to stay on track... 
r15 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
CPU Registers Memory 
3,2,1,0,1,2,3 
1,1,2,6 
03,15,15,15,15, 
15,03 
r1 
r13 
r14 
3 
03 
2 
15 
1 
100 
101 
102 
103 
104 
105 
100,101,102,103, 
104,105,106,105, 
104,103,102,101, 
100 
r15 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
15 
Follow the line numbers below to stay on track... 
r15 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
main 
factorial 
store 
to stack 
recursive case 
load 
from stack 
base 
case 
Trace what happens for an input of 3... 
CPU Registers Memory 
3,2,1,0,1,2,3 
1,1,2,6 
03,15,15,15,15, 
15,03 
r1 
r13 
r14 
3 
03 
2 
15 
1 
100 
101 
102 
103 
104 
105 
100,101,102,103, 
104,105,106,105, 
104,103,102,101, 
100 
r15 
"the stack" 
input: x 
return value (the "result") 
return address (line #) 
the stack pointer 
00 read r1 
01 setn r15 100 
02 call r14 06 
03 write r13 
04 halt 
05 nop 
06 jnez r1 09 
07 setn r13 1 
08 jumpr r14 
09 addn r15 1 
10 storer r1 r15 
11 addn r15 1 
12 storer r14 r15 
13 addn r1 -1 
14 call r14 06 
15 loadr r14 r15 
16 addn r15 -1 
17 loadr r1 r15 
18 addn r15 -1 
19 mul r13 r13 r1 
20 jumpr r14 
106 
107 
It's easy to get lost! 
15 
Follow the line numbers below to stay on track... 
r15 
0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4

Más contenido relacionado

Destacado

Want to know how to find a reliable locksmith
Want to know how to find a reliable locksmith Want to know how to find a reliable locksmith
Want to know how to find a reliable locksmith ninzmiller
 
Còpia de taula de fitxers
Còpia de taula de fitxersCòpia de taula de fitxers
Còpia de taula de fitxerszire22
 
Ikt udruzenje Pk FBiH - 02-12-2014 - jahorina
Ikt udruzenje Pk FBiH - 02-12-2014 - jahorinaIkt udruzenje Pk FBiH - 02-12-2014 - jahorina
Ikt udruzenje Pk FBiH - 02-12-2014 - jahorinaIgor Pandzic
 
Team 5 Website Presentation Rough Draft.
Team 5 Website Presentation Rough Draft.Team 5 Website Presentation Rough Draft.
Team 5 Website Presentation Rough Draft.KKmck
 
My magazine pitch
My magazine pitchMy magazine pitch
My magazine pitchkatiess07
 
Digitalna agenda Dalibor Drljača
Digitalna agenda Dalibor DrljačaDigitalna agenda Dalibor Drljača
Digitalna agenda Dalibor DrljačaIgor Pandzic
 
Kaspersky Kesb ep10 no_cm_v01a
Kaspersky Kesb ep10 no_cm_v01aKaspersky Kesb ep10 no_cm_v01a
Kaspersky Kesb ep10 no_cm_v01aIgor Pandzic
 
Copyright & fair use
Copyright & fair useCopyright & fair use
Copyright & fair useakirkpatri
 
Projekat web Igor Pandžić
Projekat web Igor PandžićProjekat web Igor Pandžić
Projekat web Igor PandžićIgor Pandzic
 
Connect to Community Old Town
Connect to Community Old TownConnect to Community Old Town
Connect to Community Old Townaruban21
 
Info ars napredno google pretrazivanje
Info ars   napredno google pretrazivanjeInfo ars   napredno google pretrazivanje
Info ars napredno google pretrazivanjeIgor Pandzic
 

Destacado (12)

Want to know how to find a reliable locksmith
Want to know how to find a reliable locksmith Want to know how to find a reliable locksmith
Want to know how to find a reliable locksmith
 
Còpia de taula de fitxers
Còpia de taula de fitxersCòpia de taula de fitxers
Còpia de taula de fitxers
 
Ikt udruzenje Pk FBiH - 02-12-2014 - jahorina
Ikt udruzenje Pk FBiH - 02-12-2014 - jahorinaIkt udruzenje Pk FBiH - 02-12-2014 - jahorina
Ikt udruzenje Pk FBiH - 02-12-2014 - jahorina
 
Team 5 Website Presentation Rough Draft.
Team 5 Website Presentation Rough Draft.Team 5 Website Presentation Rough Draft.
Team 5 Website Presentation Rough Draft.
 
Learn Japanesse
Learn JapanesseLearn Japanesse
Learn Japanesse
 
My magazine pitch
My magazine pitchMy magazine pitch
My magazine pitch
 
Digitalna agenda Dalibor Drljača
Digitalna agenda Dalibor DrljačaDigitalna agenda Dalibor Drljača
Digitalna agenda Dalibor Drljača
 
Kaspersky Kesb ep10 no_cm_v01a
Kaspersky Kesb ep10 no_cm_v01aKaspersky Kesb ep10 no_cm_v01a
Kaspersky Kesb ep10 no_cm_v01a
 
Copyright & fair use
Copyright & fair useCopyright & fair use
Copyright & fair use
 
Projekat web Igor Pandžić
Projekat web Igor PandžićProjekat web Igor Pandžić
Projekat web Igor Pandžić
 
Connect to Community Old Town
Connect to Community Old TownConnect to Community Old Town
Connect to Community Old Town
 
Info ars napredno google pretrazivanje
Info ars   napredno google pretrazivanjeInfo ars   napredno google pretrazivanje
Info ars napredno google pretrazivanje
 

Similar a tracing a recursive factorial function in assembly language

Graph libraries in Matlab: MatlabBGL and gaimc
Graph libraries in Matlab: MatlabBGL and gaimcGraph libraries in Matlab: MatlabBGL and gaimc
Graph libraries in Matlab: MatlabBGL and gaimcDavid Gleich
 
Ethereum 9¾ @ Devcon5
Ethereum 9¾ @ Devcon5Ethereum 9¾ @ Devcon5
Ethereum 9¾ @ Devcon5Wanseob Lim
 
SQL WORKSHOP::Lecture 4
SQL WORKSHOP::Lecture 4SQL WORKSHOP::Lecture 4
SQL WORKSHOP::Lecture 4Umair Amjad
 
Sangam 18 - Great Applications with Great SQL
Sangam 18 - Great Applications with Great SQLSangam 18 - Great Applications with Great SQL
Sangam 18 - Great Applications with Great SQLConnor McDonald
 
Wellington APAC Groundbreakers tour - SQL Pattern Matching
Wellington APAC Groundbreakers tour - SQL Pattern MatchingWellington APAC Groundbreakers tour - SQL Pattern Matching
Wellington APAC Groundbreakers tour - SQL Pattern MatchingConnor McDonald
 

Similar a tracing a recursive factorial function in assembly language (8)

Graph libraries in Matlab: MatlabBGL and gaimc
Graph libraries in Matlab: MatlabBGL and gaimcGraph libraries in Matlab: MatlabBGL and gaimc
Graph libraries in Matlab: MatlabBGL and gaimc
 
assembly
assemblyassembly
assembly
 
SLIME
SLIMESLIME
SLIME
 
Ethereum 9¾ @ Devcon5
Ethereum 9¾ @ Devcon5Ethereum 9¾ @ Devcon5
Ethereum 9¾ @ Devcon5
 
SQL WORKSHOP::Lecture 4
SQL WORKSHOP::Lecture 4SQL WORKSHOP::Lecture 4
SQL WORKSHOP::Lecture 4
 
Sangam 18 - Great Applications with Great SQL
Sangam 18 - Great Applications with Great SQLSangam 18 - Great Applications with Great SQL
Sangam 18 - Great Applications with Great SQL
 
Analytic SQL Sep 2013
Analytic SQL Sep 2013Analytic SQL Sep 2013
Analytic SQL Sep 2013
 
Wellington APAC Groundbreakers tour - SQL Pattern Matching
Wellington APAC Groundbreakers tour - SQL Pattern MatchingWellington APAC Groundbreakers tour - SQL Pattern Matching
Wellington APAC Groundbreakers tour - SQL Pattern Matching
 

Último

Graduate Outcomes Presentation Slides - English
Graduate Outcomes Presentation Slides - EnglishGraduate Outcomes Presentation Slides - English
Graduate Outcomes Presentation Slides - Englishneillewis46
 
Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...ZurliaSoop
 
Exploring_the_Narrative_Style_of_Amitav_Ghoshs_Gun_Island.pptx
Exploring_the_Narrative_Style_of_Amitav_Ghoshs_Gun_Island.pptxExploring_the_Narrative_Style_of_Amitav_Ghoshs_Gun_Island.pptx
Exploring_the_Narrative_Style_of_Amitav_Ghoshs_Gun_Island.pptxPooja Bhuva
 
Fostering Friendships - Enhancing Social Bonds in the Classroom
Fostering Friendships - Enhancing Social Bonds  in the ClassroomFostering Friendships - Enhancing Social Bonds  in the Classroom
Fostering Friendships - Enhancing Social Bonds in the ClassroomPooky Knightsmith
 
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...Nguyen Thanh Tu Collection
 
ICT Role in 21st Century Education & its Challenges.pptx
ICT Role in 21st Century Education & its Challenges.pptxICT Role in 21st Century Education & its Challenges.pptx
ICT Role in 21st Century Education & its Challenges.pptxAreebaZafar22
 
Plant propagation: Sexual and Asexual propapagation.pptx
Plant propagation: Sexual and Asexual propapagation.pptxPlant propagation: Sexual and Asexual propapagation.pptx
Plant propagation: Sexual and Asexual propapagation.pptxUmeshTimilsina1
 
How to Manage Global Discount in Odoo 17 POS
How to Manage Global Discount in Odoo 17 POSHow to Manage Global Discount in Odoo 17 POS
How to Manage Global Discount in Odoo 17 POSCeline George
 
Google Gemini An AI Revolution in Education.pptx
Google Gemini An AI Revolution in Education.pptxGoogle Gemini An AI Revolution in Education.pptx
Google Gemini An AI Revolution in Education.pptxDr. Sarita Anand
 
COMMUNICATING NEGATIVE NEWS - APPROACHES .pptx
COMMUNICATING NEGATIVE NEWS - APPROACHES .pptxCOMMUNICATING NEGATIVE NEWS - APPROACHES .pptx
COMMUNICATING NEGATIVE NEWS - APPROACHES .pptxannathomasp01
 
HMCS Vancouver Pre-Deployment Brief - May 2024 (Web Version).pptx
HMCS Vancouver Pre-Deployment Brief - May 2024 (Web Version).pptxHMCS Vancouver Pre-Deployment Brief - May 2024 (Web Version).pptx
HMCS Vancouver Pre-Deployment Brief - May 2024 (Web Version).pptxmarlenawright1
 
NO1 Top Black Magic Specialist In Lahore Black magic In Pakistan Kala Ilam Ex...
NO1 Top Black Magic Specialist In Lahore Black magic In Pakistan Kala Ilam Ex...NO1 Top Black Magic Specialist In Lahore Black magic In Pakistan Kala Ilam Ex...
NO1 Top Black Magic Specialist In Lahore Black magic In Pakistan Kala Ilam Ex...Amil baba
 
UGC NET Paper 1 Mathematical Reasoning & Aptitude.pdf
UGC NET Paper 1 Mathematical Reasoning & Aptitude.pdfUGC NET Paper 1 Mathematical Reasoning & Aptitude.pdf
UGC NET Paper 1 Mathematical Reasoning & Aptitude.pdfNirmal Dwivedi
 
Wellbeing inclusion and digital dystopias.pptx
Wellbeing inclusion and digital dystopias.pptxWellbeing inclusion and digital dystopias.pptx
Wellbeing inclusion and digital dystopias.pptxJisc
 
Micro-Scholarship, What it is, How can it help me.pdf
Micro-Scholarship, What it is, How can it help me.pdfMicro-Scholarship, What it is, How can it help me.pdf
Micro-Scholarship, What it is, How can it help me.pdfPoh-Sun Goh
 
80 ĐỀ THI THỬ TUYỂN SINH TIẾNG ANH VÀO 10 SỞ GD – ĐT THÀNH PHỐ HỒ CHÍ MINH NĂ...
80 ĐỀ THI THỬ TUYỂN SINH TIẾNG ANH VÀO 10 SỞ GD – ĐT THÀNH PHỐ HỒ CHÍ MINH NĂ...80 ĐỀ THI THỬ TUYỂN SINH TIẾNG ANH VÀO 10 SỞ GD – ĐT THÀNH PHỐ HỒ CHÍ MINH NĂ...
80 ĐỀ THI THỬ TUYỂN SINH TIẾNG ANH VÀO 10 SỞ GD – ĐT THÀNH PHỐ HỒ CHÍ MINH NĂ...Nguyen Thanh Tu Collection
 
Towards a code of practice for AI in AT.pptx
Towards a code of practice for AI in AT.pptxTowards a code of practice for AI in AT.pptx
Towards a code of practice for AI in AT.pptxJisc
 
FSB Advising Checklist - Orientation 2024
FSB Advising Checklist - Orientation 2024FSB Advising Checklist - Orientation 2024
FSB Advising Checklist - Orientation 2024Elizabeth Walsh
 
Interdisciplinary_Insights_Data_Collection_Methods.pptx
Interdisciplinary_Insights_Data_Collection_Methods.pptxInterdisciplinary_Insights_Data_Collection_Methods.pptx
Interdisciplinary_Insights_Data_Collection_Methods.pptxPooja Bhuva
 

Último (20)

Graduate Outcomes Presentation Slides - English
Graduate Outcomes Presentation Slides - EnglishGraduate Outcomes Presentation Slides - English
Graduate Outcomes Presentation Slides - English
 
Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
 
Exploring_the_Narrative_Style_of_Amitav_Ghoshs_Gun_Island.pptx
Exploring_the_Narrative_Style_of_Amitav_Ghoshs_Gun_Island.pptxExploring_the_Narrative_Style_of_Amitav_Ghoshs_Gun_Island.pptx
Exploring_the_Narrative_Style_of_Amitav_Ghoshs_Gun_Island.pptx
 
Fostering Friendships - Enhancing Social Bonds in the Classroom
Fostering Friendships - Enhancing Social Bonds  in the ClassroomFostering Friendships - Enhancing Social Bonds  in the Classroom
Fostering Friendships - Enhancing Social Bonds in the Classroom
 
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
 
ICT Role in 21st Century Education & its Challenges.pptx
ICT Role in 21st Century Education & its Challenges.pptxICT Role in 21st Century Education & its Challenges.pptx
ICT Role in 21st Century Education & its Challenges.pptx
 
Plant propagation: Sexual and Asexual propapagation.pptx
Plant propagation: Sexual and Asexual propapagation.pptxPlant propagation: Sexual and Asexual propapagation.pptx
Plant propagation: Sexual and Asexual propapagation.pptx
 
How to Manage Global Discount in Odoo 17 POS
How to Manage Global Discount in Odoo 17 POSHow to Manage Global Discount in Odoo 17 POS
How to Manage Global Discount in Odoo 17 POS
 
Mehran University Newsletter Vol-X, Issue-I, 2024
Mehran University Newsletter Vol-X, Issue-I, 2024Mehran University Newsletter Vol-X, Issue-I, 2024
Mehran University Newsletter Vol-X, Issue-I, 2024
 
Google Gemini An AI Revolution in Education.pptx
Google Gemini An AI Revolution in Education.pptxGoogle Gemini An AI Revolution in Education.pptx
Google Gemini An AI Revolution in Education.pptx
 
COMMUNICATING NEGATIVE NEWS - APPROACHES .pptx
COMMUNICATING NEGATIVE NEWS - APPROACHES .pptxCOMMUNICATING NEGATIVE NEWS - APPROACHES .pptx
COMMUNICATING NEGATIVE NEWS - APPROACHES .pptx
 
HMCS Vancouver Pre-Deployment Brief - May 2024 (Web Version).pptx
HMCS Vancouver Pre-Deployment Brief - May 2024 (Web Version).pptxHMCS Vancouver Pre-Deployment Brief - May 2024 (Web Version).pptx
HMCS Vancouver Pre-Deployment Brief - May 2024 (Web Version).pptx
 
NO1 Top Black Magic Specialist In Lahore Black magic In Pakistan Kala Ilam Ex...
NO1 Top Black Magic Specialist In Lahore Black magic In Pakistan Kala Ilam Ex...NO1 Top Black Magic Specialist In Lahore Black magic In Pakistan Kala Ilam Ex...
NO1 Top Black Magic Specialist In Lahore Black magic In Pakistan Kala Ilam Ex...
 
UGC NET Paper 1 Mathematical Reasoning & Aptitude.pdf
UGC NET Paper 1 Mathematical Reasoning & Aptitude.pdfUGC NET Paper 1 Mathematical Reasoning & Aptitude.pdf
UGC NET Paper 1 Mathematical Reasoning & Aptitude.pdf
 
Wellbeing inclusion and digital dystopias.pptx
Wellbeing inclusion and digital dystopias.pptxWellbeing inclusion and digital dystopias.pptx
Wellbeing inclusion and digital dystopias.pptx
 
Micro-Scholarship, What it is, How can it help me.pdf
Micro-Scholarship, What it is, How can it help me.pdfMicro-Scholarship, What it is, How can it help me.pdf
Micro-Scholarship, What it is, How can it help me.pdf
 
80 ĐỀ THI THỬ TUYỂN SINH TIẾNG ANH VÀO 10 SỞ GD – ĐT THÀNH PHỐ HỒ CHÍ MINH NĂ...
80 ĐỀ THI THỬ TUYỂN SINH TIẾNG ANH VÀO 10 SỞ GD – ĐT THÀNH PHỐ HỒ CHÍ MINH NĂ...80 ĐỀ THI THỬ TUYỂN SINH TIẾNG ANH VÀO 10 SỞ GD – ĐT THÀNH PHỐ HỒ CHÍ MINH NĂ...
80 ĐỀ THI THỬ TUYỂN SINH TIẾNG ANH VÀO 10 SỞ GD – ĐT THÀNH PHỐ HỒ CHÍ MINH NĂ...
 
Towards a code of practice for AI in AT.pptx
Towards a code of practice for AI in AT.pptxTowards a code of practice for AI in AT.pptx
Towards a code of practice for AI in AT.pptx
 
FSB Advising Checklist - Orientation 2024
FSB Advising Checklist - Orientation 2024FSB Advising Checklist - Orientation 2024
FSB Advising Checklist - Orientation 2024
 
Interdisciplinary_Insights_Data_Collection_Methods.pptx
Interdisciplinary_Insights_Data_Collection_Methods.pptxInterdisciplinary_Insights_Data_Collection_Methods.pptx
Interdisciplinary_Insights_Data_Collection_Methods.pptx
 

tracing a recursive factorial function in assembly language

  • 1. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... r1 r13 r14 CPU Registers Memory 100 101 102 103 104 105 r15 "the stack" input: x return value (the "result") return address (line #) the stack pointer 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! Follow the line numbers below to stay on track... 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 2. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... r1 3 r13 r14 CPU Registers Memory 100 101 102 103 104 105 r15 "the stack" input: x return value (the "result") return address (line #) the stack pointer 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! Follow the line numbers below to stay on track... 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 3. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... r1 3 r13 r14 CPU Registers Memory 100 101 102 103 104 105 r15 100 "the stack" input: x return value (the "result") return address (line #) the stack pointer r15 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! Follow the line numbers below to stay on track... 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 4. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... 3 CPU Registers Memory ??? r1 r13 r14 100 101 102 103 104 105 r15 100 "the stack" input: x return value (the "result") return address (line #) the stack pointer r15 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! Follow the line numbers below to stay on track... 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 5. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... 3 03 r1 r13 r14 CPU Registers Memory 100 101 102 103 104 105 r15 100 "the stack" input: x return value (the "result") return address (line #) the stack pointer r15 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! Follow the line numbers below to stay on track... 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 6. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... 3 03 r1 r13 r14 CPU Registers Memory 100 101 102 103 104 105 r15 100 "the stack" input: x return value (the "result") return address (line #) the stack pointer r15 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! Follow the line numbers below to stay on track... 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 7. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... 3 03 r1 r13 r14 CPU Registers Memory 100 101 102 103 104 105 r15 100 "the stack" input: x return value (the "result") return address (line #) the stack pointer r15 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! Follow the line numbers below to stay on track... 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 8. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... 3 03 r1 r13 r14 CPU Registers Memory 100 101 102 103 104 105 r15 100 "the stack" input: x return value (the "result") return address (line #) the stack pointer r15 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! Follow the line numbers below to stay on track... 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 9. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... 3 03 r1 r13 r14 CPU Registers Memory 100 101 102 103 104 105 r15 100,101 "the stack" input: x return value (the "result") return address (line #) the stack pointer r15 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! Follow the line numbers below to stay on track... 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 10. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... 3 03 r1 r13 r14 CPU Registers Memory 100 101 102 103 104 105 r15 100,101 "the stack" input: x return value (the "result") return address (line #) the stack pointer r15 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! Follow the line numbers below to stay on track... 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 11. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... 3 03 r1 r13 r14 CPU Registers Memory 3 100 101 102 103 104 105 r15 100,101 "the stack" input: x return value (the "result") return address (line #) the stack pointer r15 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! Follow the line numbers below to stay on track... 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 12. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... 3 03 r1 r13 r14 CPU Registers Memory 3 100 101 102 103 104 105 r15 100,101,102 "the stack" input: x return value (the "result") return address (line #) the stack pointer r15 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! Follow the line numbers below to stay on track... 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 13. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... 3 03 r1 r13 r14 CPU Registers Memory 3 03 100 101 102 103 104 105 r15 100,101,102 "the stack" input: x return value (the "result") return address (line #) the stack pointer 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! Follow the line numbers below to stay on track... r15 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 14. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... CPU Registers Memory 3, 2 03 r1 r13 r14 3 03 100 101 102 103 104 105 r15 100,101,102 "the stack" input: x return value (the "result") return address (line #) the stack pointer 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! Follow the line numbers below to stay on track... r15 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 15. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... CPU Registers Memory 3,2 03 r1 r13 r14 3 03 100 101 102 103 104 105 r15 100,101,102 "the stack" input: x return value (the "result") return address (line #) the stack pointer 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! Follow the line numbers below to stay on track... r15 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 16. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... CPU Registers Memory 3,2 03,15 r1 r13 r14 3 03 100 101 102 103 104 105 r15 100,101,102 "the stack" input: x return value (the "result") return address (line #) the stack pointer 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! Follow the line numbers below to stay on track... r15 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 17. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... CPU Registers Memory 3,2 03,15 r1 r13 r14 3 03 100 101 102 103 104 105 r15 100,101,102 "the stack" input: x return value (the "result") return address (line #) the stack pointer 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! Follow the line numbers below to stay on track... r15 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 18. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... CPU Registers Memory 3,2 03,15 r1 r13 r14 3 03 100 101 102 103 104 105 r15 100,101,102 "the stack" input: x return value (the "result") return address (line #) the stack pointer 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! Follow the line numbers below to stay on track... r15 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 19. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... CPU Registers Memory 3,2 03,15 r1 r13 r14 3 03 100 101 102 103 104 105 r15 100,101,102,103 "the stack" input: x return value (the "result") return address (line #) the stack pointer 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! Follow the line numbers below to stay on track... r15 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 20. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... CPU Registers Memory 3,2 03,15 r1 r13 r14 3 03 2 100 101 102 103 104 105 r15 100,101,102,103 "the stack" input: x return value (the "result") return address (line #) the stack pointer 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! Follow the line numbers below to stay on track... r15 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 21. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... CPU Registers Memory 3,2 03,15 r1 r13 r14 3 03 2 100 101 102 103 104 105 100,101,102,103, 104 r15 "the stack" input: x return value (the "result") return address (line #) the stack pointer 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! Follow the line numbers below to stay on track... r15 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 22. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... CPU Registers Memory 3,2 03,15 r1 r13 r14 3 03 2 15 100 101 102 103 104 105 100,101,102,103, 104 r15 "the stack" input: x return value (the "result") return address (line #) the stack pointer 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! Follow the line numbers below to stay on track... r15 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 23. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... CPU Registers Memory 3,2,1 03,15 r1 r13 r14 3 03 2 15 100 101 102 103 104 105 100,101,102,103, 104 r15 "the stack" input: x return value (the "result") return address (line #) the stack pointer 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! Follow the line numbers below to stay on track... r15 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 24. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... CPU Registers Memory 3,2,1 03,15,15 r1 r13 r14 3 03 2 15 100 101 102 103 104 105 100,101,102,103, 104 r15 "the stack" input: x return value (the "result") return address (line #) the stack pointer 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! Follow the line numbers below to stay on track... r15 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 25. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... CPU Registers Memory 3,2,1 03,15,15 r1 r13 r14 3 03 2 15 100 101 102 103 104 105 100,101,102,103, 104 r15 "the stack" input: x return value (the "result") return address (line #) the stack pointer 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! Follow the line numbers below to stay on track... r15 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 26. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... CPU Registers Memory 3,2,1 03,15,15 r1 r13 r14 3 03 2 15 100 101 102 103 104 105 100,101,102,103, 104,105 r15 "the stack" input: x return value (the "result") return address (line #) the stack pointer 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! Follow the line numbers below to stay on track... r15 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 27. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... CPU Registers Memory 3,2,1 03,15,15 r1 r13 r14 3 03 2 15 1 100 101 102 103 104 105 100,101,102,103, 104,105 r15 "the stack" input: x return value (the "result") return address (line #) the stack pointer 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! Follow the line numbers below to stay on track... r15 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 28. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... CPU Registers Memory 3,2,1 03,15,15 r1 r13 r14 3 03 2 15 1 100 101 102 103 104 105 100,101,102,103, 104,105,106 r15 "the stack" input: x return value (the "result") return address (line #) the stack pointer 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! Follow the line numbers below to stay on track... r15 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 29. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... CPU Registers Memory 3,2,1 03,15,15 r1 r13 r14 3 03 2 15 1 100 101 102 103 104 105 100,101,102,103, 104,105,106 r15 "the stack" input: x return value (the "result") return address (line #) the stack pointer 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! 15 Follow the line numbers below to stay on track... r15 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 30. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... CPU Registers Memory 3,2,1,0 03,15,15 r1 r13 r14 3 03 2 15 1 100 101 102 103 104 105 100,101,102,103, 104,105,106 r15 "the stack" input: x return value (the "result") return address (line #) the stack pointer 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! 15 Follow the line numbers below to stay on track... r15 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 31. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... CPU Registers Memory 3,2,1,0 03,15,15,15 r1 r13 r14 3 03 2 15 1 100 101 102 103 104 105 100,101,102,103, 104,105,106 r15 "the stack" input: x return value (the "result") return address (line #) the stack pointer 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! 15 Follow the line numbers below to stay on track... r15 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 32. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... CPU Registers Memory 3,2,1,0 03,15,15,15 r1 r13 r14 3 03 2 15 1 100 101 102 103 104 105 100,101,102,103, 104,105,106 r15 "the stack" input: x return value (the "result") return address (line #) the stack pointer 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! 15 Follow the line numbers below to stay on track... r15 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 33. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... CPU Registers Memory 3,2,1,0 1 03,15,15,15 r1 r13 r14 3 03 2 15 1 100 101 102 103 104 105 100,101,102,103, 104,105,106 r15 "the stack" input: x return value (the "result") return address (line #) the stack pointer 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! 15 Follow the line numbers below to stay on track... r15 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 34. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... CPU Registers Memory 3,2,1,0 1 03,15,15,15 r1 r13 r14 3 03 2 15 1 100 101 102 103 104 105 100,101,102,103, 104,105,106 r15 "the stack" input: x return value (the "result") return address (line #) the stack pointer 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! 15 Follow the line numbers below to stay on track... r15 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 35. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... CPU Registers Memory 3,2,1,0 1 03,15,15,15 r1 r13 r14 3 03 2 15 1 100 101 102 103 104 105 100,101,102,103, 104,105,106 r15 "the stack" input: x return value (the "result") return address (line #) the stack pointer 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! 15 Follow the line numbers below to stay on track... r15 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 36. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... CPU Registers Memory 3,2,1,0 1 03,15,15,15 r1 r13 r14 3 03 2 15 1 100 101 102 103 104 105 100,101,102,103, 104,105,106 r15 "the stack" input: x return value (the "result") return address (line #) the stack pointer 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! 15 Follow the line numbers below to stay on track... r15 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 37. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... CPU Registers Memory 3,2,1,0 1 03,15,15,15,15 r1 r13 r14 3 03 2 15 1 100 101 102 103 104 105 100,101,102,103, 104,105,106 r15 "the stack" input: x return value (the "result") return address (line #) the stack pointer 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! 15 Follow the line numbers below to stay on track... r15 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 38. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... CPU Registers Memory 3,2,1,0 1 03,15,15,15,15 r1 r13 r14 3 03 2 15 1 100 101 102 103 104 105 100,101,102,103, 104,105,106,105 r15 "the stack" input: x return value (the "result") return address (line #) the stack pointer 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! 15 Follow the line numbers below to stay on track... r15 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 39. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... CPU Registers Memory 3,2,1,0,1 1 03,15,15,15,15 r1 r13 r14 3 03 2 15 1 100 101 102 103 104 105 100,101,102,103, 104,105,106,105 r15 "the stack" input: x return value (the "result") return address (line #) the stack pointer 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! 15 Follow the line numbers below to stay on track... r15 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 40. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... CPU Registers Memory 3,2,1,0,1 1 03,15,15,15,15 r1 r13 r14 3 03 2 15 1 100 101 102 103 104 105 100,101,102,103, 104,105,106,105, 104 r15 "the stack" input: x return value (the "result") return address (line #) the stack pointer 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! 15 Follow the line numbers below to stay on track... r15 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 41. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... CPU Registers Memory 3,2,1,0,1 1,1 03,15,15,15,15 r1 r13 r14 3 03 2 15 1 100 101 102 103 104 105 100,101,102,103, 104,105,106,105, 104 r15 "the stack" input: x return value (the "result") return address (line #) the stack pointer 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! 15 Follow the line numbers below to stay on track... r15 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 42. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... CPU Registers Memory 3,2,1,0,1 1,1 03,15,15,15,15 r1 r13 r14 3 03 2 15 1 100 101 102 103 104 105 100,101,102,103, 104,105,106,105, 104 r15 "the stack" input: x return value (the "result") return address (line #) the stack pointer 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! 15 Follow the line numbers below to stay on track... r15 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 43. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... CPU Registers Memory 3,2,1,0,1 1,1 03,15,15,15,15, 15 r1 r13 r14 3 03 2 15 1 100 101 102 103 104 105 100,101,102,103, 104,105,106,105, 104 r15 "the stack" input: x return value (the "result") return address (line #) the stack pointer 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! 15 Follow the line numbers below to stay on track... r15 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 44. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... CPU Registers Memory 3,2,1,0,1 1,1 03,15,15,15,15, 15 r1 r13 r14 3 03 2 15 1 100 101 102 103 104 105 100,101,102,103, 104,105,106,105, 104,103 r15 "the stack" input: x return value (the "result") return address (line #) the stack pointer 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! 15 Follow the line numbers below to stay on track... r15 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 45. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... CPU Registers Memory 3,2,1,0,1,2 1,1 03,15,15,15,15, 15 r1 r13 r14 3 03 2 15 1 100 101 102 103 104 105 100,101,102,103, 104,105,106,105, 104,103 r15 "the stack" input: x return value (the "result") return address (line #) the stack pointer 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! 15 Follow the line numbers below to stay on track... r15 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 46. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... CPU Registers Memory 3,2,1,0,1,2 1,1 03,15,15,15,15, 15 r1 r13 r14 3 03 2 15 1 100 101 102 103 104 105 100,101,102,103, 104,105,106,105, 104,103,102 r15 "the stack" input: x return value (the "result") return address (line #) the stack pointer 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! 15 Follow the line numbers below to stay on track... r15 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 47. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... CPU Registers Memory 3,2,1,0,1,2 1,1,2 03,15,15,15,15, 15 r1 r13 r14 3 03 2 15 1 100 101 102 103 104 105 100,101,102,103, 104,105,106,105, 104,103,102 r15 "the stack" input: x return value (the "result") return address (line #) the stack pointer 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! 15 Follow the line numbers below to stay on track... r15 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 48. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... CPU Registers Memory 3,2,1,0,1,2 1,1,2 03,15,15,15,15, 15 r1 r13 r14 3 03 2 15 1 100 101 102 103 104 105 100,101,102,103, 104,105,106,105, 104,103,102 r15 "the stack" input: x return value (the "result") return address (line #) the stack pointer 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! 15 Follow the line numbers below to stay on track... r15 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 49. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... CPU Registers Memory 3,2,1,0,1,2 1,1,2 03,15,15,15,15, 15,03 r1 r13 r14 3 03 2 15 1 100 101 102 103 104 105 100,101,102,103, 104,105,106,105, 104,103,102 r15 "the stack" input: x return value (the "result") return address (line #) the stack pointer 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! 15 Follow the line numbers below to stay on track... r15 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 50. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... CPU Registers Memory 3,2,1,0,1,2 1,1,2 03,15,15,15,15, 15,03 r1 r13 r14 3 03 2 15 1 100 101 102 103 104 105 100,101,102,103, 104,105,106,105, 104,103,102,101 r15 "the stack" input: x return value (the "result") return address (line #) the stack pointer 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! 15 Follow the line numbers below to stay on track... r15 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 51. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... CPU Registers Memory 3,2,1,0,1,2,3 1,1,2 03,15,15,15,15, 15,03 r1 r13 r14 3 03 2 15 1 100 101 102 103 104 105 100,101,102,103, 104,105,106,105, 104,103,102,101 r15 "the stack" input: x return value (the "result") return address (line #) the stack pointer 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! 15 Follow the line numbers below to stay on track... r15 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 52. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... CPU Registers Memory 3,2,1,0,1,2,3 1,1,2 03,15,15,15,15, 15,03 r1 r13 r14 3 03 2 15 1 100 101 102 103 104 105 100,101,102,103, 104,105,106,105, 104,103,102,101, 100 r15 "the stack" input: x return value (the "result") return address (line #) the stack pointer 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! 15 Follow the line numbers below to stay on track... r15 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 53. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... CPU Registers Memory 3,2,1,0,1,2,3 1,1,2,6 03,15,15,15,15, 15,03 r1 r13 r14 3 03 2 15 1 100 101 102 103 104 105 100,101,102,103, 104,105,106,105, 104,103,102,101, 100 r15 "the stack" input: x return value (the "result") return address (line #) the stack pointer 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! 15 Follow the line numbers below to stay on track... r15 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 54. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... CPU Registers Memory 3,2,1,0,1,2,3 1,1,2,6 03,15,15,15,15, 15,03 r1 r13 r14 3 03 2 15 1 100 101 102 103 104 105 100,101,102,103, 104,105,106,105, 104,103,102,101, 100 r15 "the stack" input: x return value (the "result") return address (line #) the stack pointer 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! 15 Follow the line numbers below to stay on track... r15 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 55. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... CPU Registers Memory 3,2,1,0,1,2,3 1,1,2,6 03,15,15,15,15, 15,03 r1 r13 r14 3 03 2 15 1 100 101 102 103 104 105 100,101,102,103, 104,105,106,105, 104,103,102,101, 100 r15 "the stack" input: x return value (the "result") return address (line #) the stack pointer 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! 15 Follow the line numbers below to stay on track... r15 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4
  • 56. main factorial store to stack recursive case load from stack base case Trace what happens for an input of 3... CPU Registers Memory 3,2,1,0,1,2,3 1,1,2,6 03,15,15,15,15, 15,03 r1 r13 r14 3 03 2 15 1 100 101 102 103 104 105 100,101,102,103, 104,105,106,105, 104,103,102,101, 100 r15 "the stack" input: x return value (the "result") return address (line #) the stack pointer 00 read r1 01 setn r15 100 02 call r14 06 03 write r13 04 halt 05 nop 06 jnez r1 09 07 setn r13 1 08 jumpr r14 09 addn r15 1 10 storer r1 r15 11 addn r15 1 12 storer r14 r15 13 addn r1 -1 14 call r14 06 15 loadr r14 r15 16 addn r15 -1 17 loadr r1 r15 18 addn r15 -1 19 mul r13 r13 r1 20 jumpr r14 106 107 It's easy to get lost! 15 Follow the line numbers below to stay on track... r15 0, 1, 2, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 9, 10, 11, 12, 13, 14, 6, 7, 8 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 15, 16, 17, 18, 19, 20, 3, 4