tracing a recursive factorial function in assembly language

56
factorial recursive case main store to stack load from stack case base r1 r13 r14 100 Memory CPU 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 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 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

Upload: dgsbu

Post on 14-Jul-2015

307 views

Category:

Education


0 download

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