Transcript

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

r1

r13

r14

100

MemoryCPU Registers

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 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

106

107

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

3r1

r13

r14

100

MemoryCPU Registers

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 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

106

107

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

3r1

r13

r14

100

MemoryCPU Registers

101

102

103

104

105

100r15

"the stack"input: x

return value (the "result")

return address (line #)

the stack pointer

r15

00 read r1 01 setn r15 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

106

107

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

3

???

r1

r13

r14

100

MemoryCPU Registers

101

102

103

104

105

100r15

"the stack"input: x

return value (the "result")

return address (line #)

the stack pointer

r15

00 read r1 01 setn r15 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

106

107

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

3

03

r1

r13

r14

100

MemoryCPU Registers

101

102

103

104

105

100r15

"the stack"input: x

return value (the "result")

return address (line #)

the stack pointer

r15

00 read r1 01 setn r15 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

106

107

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

3

03

r1

r13

r14

100

MemoryCPU Registers

101

102

103

104

105

100r15

"the stack"input: x

return value (the "result")

return address (line #)

the stack pointer

r15

00 read r1 01 setn r15 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

106

107

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

3

03

r1

r13

r14

100

MemoryCPU Registers

101

102

103

104

105

100r15

"the stack"input: x

return value (the "result")

return address (line #)

the stack pointer

r15

00 read r1 01 setn r15 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

106

107

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

3

03

r1

r13

r14

100

MemoryCPU Registers

101

102

103

104

105

100r15

"the stack"input: x

return value (the "result")

return address (line #)

the stack pointer

r15

00 read r1 01 setn r15 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

106

107

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

3

03

r1

r13

r14

100

MemoryCPU Registers

101

102

103

104

105

100,101r15

"the stack"input: x

return value (the "result")

return address (line #)

the stack pointer

r15

00 read r1 01 setn r15 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

106

107

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

3

03

r1

r13

r14

100

MemoryCPU Registers

101

102

103

104

105

100,101r15

"the stack"input: x

return value (the "result")

return address (line #)

the stack pointer

r15

00 read r1 01 setn r15 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

106

107

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

3

03

r1

r13

r14

3

100

MemoryCPU Registers

101

102

103

104

105

100,101r15

"the stack"input: x

return value (the "result")

return address (line #)

the stack pointer

r15

00 read r1 01 setn r15 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

106

107

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

3

03

r1

r13

r14

3

100

MemoryCPU Registers

101

102

103

104

105

100,101,102r15

"the stack"input: x

return value (the "result")

return address (line #)

the stack pointer

r15

00 read r1 01 setn r15 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

106

107

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

3

03

r1

r13

r14

3

03

100

MemoryCPU Registers

101

102

103

104

105

100,101,102r15

"the stack"input: x

return value (the "result")

return address (line #)

the stack pointer

00 read r1 01 setn r15 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

106

107

r15

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

3, 2

03

r1

r13

r14

3

03

100

MemoryCPU Registers

101

102

103

104

105

100,101,102r15

"the stack"input: x

return value (the "result")

return address (line #)

the stack pointer

00 read r1 01 setn r15 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

106

107

r15

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

3,2

03

r1

r13

r14

3

03

100

MemoryCPU Registers

101

102

103

104

105

100,101,102r15

"the stack"input: x

return value (the "result")

return address (line #)

the stack pointer

00 read r1 01 setn r15 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

106

107

r15

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

3,2

03,15

r1

r13

r14

3

03

100

MemoryCPU Registers

101

102

103

104

105

100,101,102r15

"the stack"input: x

return value (the "result")

return address (line #)

the stack pointer

00 read r1 01 setn r15 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

106

107

r15

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

3,2

03,15

r1

r13

r14

3

03

100

MemoryCPU Registers

101

102

103

104

105

100,101,102r15

"the stack"input: x

return value (the "result")

return address (line #)

the stack pointer

00 read r1 01 setn r15 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

106

107

r15

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

3,2

03,15

r1

r13

r14

3

03

100

MemoryCPU Registers

101

102

103

104

105

100,101,102r15

"the stack"input: x

return value (the "result")

return address (line #)

the stack pointer

00 read r1 01 setn r15 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

106

107

r15

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

3,2

03,15

r1

r13

r14

3

03

100

MemoryCPU Registers

101

102

103

104

105

100,101,102,103r15

"the stack"input: x

return value (the "result")

return address (line #)

the stack pointer

00 read r1 01 setn r15 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

106

107

r15

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

3,2

03,15

r1

r13

r14

3

03

2

100

MemoryCPU Registers

101

102

103

104

105

100,101,102,103r15

"the stack"input: x

return value (the "result")

return address (line #)

the stack pointer

00 read r1 01 setn r15 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

106

107

r15

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

3,2

03,15

r1

r13

r14

3

03

2

100

MemoryCPU Registers

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 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

106

107

r15

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

3,2

03,15

r1

r13

r14

3

03

2

15

100

MemoryCPU Registers

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 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

106

107

r15

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

3,2,1

03,15

r1

r13

r14

3

03

2

15

100

MemoryCPU Registers

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 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

106

107

r15

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

3,2,1

03,15,15

r1

r13

r14

3

03

2

15

100

MemoryCPU Registers

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 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

106

107

r15

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

3,2,1

03,15,15

r1

r13

r14

3

03

2

15

100

MemoryCPU Registers

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 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

106

107

r15

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

3,2,1

03,15,15

r1

r13

r14

3

03

2

15

100

MemoryCPU Registers

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 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

106

107

r15

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

3,2,1

03,15,15

r1

r13

r14

3

03

2

15

1

100

MemoryCPU Registers

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 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

106

107

r15

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

3,2,1

03,15,15

r1

r13

r14

3

03

2

15

1

100

MemoryCPU Registers

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 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

106

107

r15

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

3,2,1

03,15,15

r1

r13

r14

3

03

2

15

1

100

MemoryCPU Registers

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 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

15

106

107

r15

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

3,2,1,0

03,15,15

r1

r13

r14

3

03

2

15

1

100

MemoryCPU Registers

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 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

15

106

107

r15

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

3,2,1,0

03,15,15,15

r1

r13

r14

3

03

2

15

1

100

MemoryCPU Registers

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 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

15

106

107

r15

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

3,2,1,0

03,15,15,15

r1

r13

r14

3

03

2

15

1

100

MemoryCPU Registers

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 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

15

106

107

r15

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

3,2,1,0

1

03,15,15,15

r1

r13

r14

3

03

2

15

1

100

MemoryCPU Registers

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 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

15

106

107

r15

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

3,2,1,0

1

03,15,15,15

r1

r13

r14

3

03

2

15

1

100

MemoryCPU Registers

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 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

15

106

107

r15

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

3,2,1,0

1

03,15,15,15

r1

r13

r14

3

03

2

15

1

100

MemoryCPU Registers

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 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

15

106

107

r15

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

3,2,1,0

1

03,15,15,15

r1

r13

r14

3

03

2

15

1

100

MemoryCPU Registers

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 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

15

106

107

r15

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

3,2,1,0

1

03,15,15,15,15

r1

r13

r14

3

03

2

15

1

100

MemoryCPU Registers

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 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

15

106

107

r15

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

3,2,1,0

1

03,15,15,15,15

r1

r13

r14

3

03

2

15

1

100

MemoryCPU Registers

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 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

15

106

107

r15

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

3,2,1,0,1

1

03,15,15,15,15

r1

r13

r14

3

03

2

15

1

100

MemoryCPU Registers

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 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

15

106

107

r15

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

3,2,1,0,1

1

03,15,15,15,15

r1

r13

r14

3

03

2

15

1

100

MemoryCPU Registers

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 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

15

106

107

r15

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

3,2,1,0,1

1,1

03,15,15,15,15

r1

r13

r14

3

03

2

15

1

100

MemoryCPU Registers

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 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

15

106

107

r15

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

3,2,1,0,1

1,1

03,15,15,15,15

r1

r13

r14

3

03

2

15

1

100

MemoryCPU Registers

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 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

15

106

107

r15

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

3,2,1,0,1

1,1

03,15,15,15,15,

15

r1

r13

r14

3

03

2

15

1

100

MemoryCPU Registers

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 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

15

106

107

r15

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

3,2,1,0,1

1,1

03,15,15,15,15,

15

r1

r13

r14

3

03

2

15

1

100

MemoryCPU Registers

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 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

15

106

107

r15

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

3,2,1,0,1,2

1,1

03,15,15,15,15,

15

r1

r13

r14

3

03

2

15

1

100

MemoryCPU Registers

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 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

15

106

107

r15

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

3,2,1,0,1,2

1,1

03,15,15,15,15,

15

r1

r13

r14

3

03

2

15

1

100

MemoryCPU Registers

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 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

15

106

107

r15

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

3,2,1,0,1,2

1,1,2

03,15,15,15,15,

15

r1

r13

r14

3

03

2

15

1

100

MemoryCPU Registers

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 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

15

106

107

r15

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

3,2,1,0,1,2

1,1,2

03,15,15,15,15,

15

r1

r13

r14

3

03

2

15

1

100

MemoryCPU Registers

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 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

15

106

107

r15

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

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

MemoryCPU Registers

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 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

15

106

107

r15

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

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

MemoryCPU Registers

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 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

15

106

107

r15

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

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

MemoryCPU Registers

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 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

15

106

107

r15

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

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

MemoryCPU Registers

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 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

15

106

107

r15

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

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

MemoryCPU Registers

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 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

15

106

107

r15

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

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

MemoryCPU Registers

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 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

15

106

107

r15

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

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

MemoryCPU Registers

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 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

15

106

107

r15

fact

ori

al

rec

urs

ive

ca

se

mai

n

sto

reto

sta

ck

load

from

sta

ck

case

bas

e

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

MemoryCPU Registers

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 10002 call r14 0603 write r1304 halt05 nop06 jnez r1 0907 setn r13 108 jumpr r1409 addn r15 110 storer r1 r1511 addn r15 112 storer r14 r1513 addn r1 -114 call r14 0615 loadr r14 r1516 addn r15 -117 loadr r1 r1518 addn r15 -119 mul r13 r13 r120 jumpr r14

Trace what happens for an input of 3...

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

It's easy to get lost! Follow the line numbers below to stay on track...

15

106

107

r15


Recommended