30: B202 R2 <- 2 push the return address, allocate space for n2 31: 2772 R7 <- R7 - R2 = R7 - 2 stack layout: RA n2 n p 32: A670 M[R7+0] <- R6 33: 9172 R1 <- M[R7+2] R1 <- n 34: 2312 R3 <- R1 - R2 = R1 - 2 R3 <- n - 2 35: 634B jump to 4B if R3 < 0 if (n < 2) goto 4B 36: 9173 R1 <- M[R7+3] R1 <- p 37: 2772 R2 <- R7 - R2 = R7 - 2 push p and n-2 38: A171 M[R7+1] <- R1 push p 39: A370 M[R7+0] <- R3 push n-2 3A: 8630 R6 <- PC, PC <- 30 call fib(n-2,p) 3B: B202 R2 <- 2 3C: 1772 R7 <- R7 + R2 = R7 + 2 pop p and n-2 3D: A171 M[R7+1] <- R1 n2 <- fib(n-2,p) 3E: 2772 R2 <- R7 - R2 = R7 - 2 push n2 and n-1 3F: 9373 R3 <- M[R7+3] R3 <- n2 40: A371 M[R7+1] <- R3 push n2 41: 9374 R3 <- M[R7+4] R3 <- n 42: B101 R1 <- 1 43: 2331 R3 <- R3 - R1 = R3 - 1 R3 <- n - 1 44: A370 M[R7+0] <- R3 push n-1 45: 8630 R6 <- PC, PC <- 30 call fib(n-1,n2) 46: B202 R2 <- 2 47: 1772 R7 <- R7 + R2 = R7 + 2 pop n2 and n-1 48: 9670 R6 <- M[R7+0] get return address 49: 1772 R7 <- R7 + R2 = R7 + 2 discard return address and n2 4A: 7600 PC <- R6 return 4B: 9373 R3 <- M[R7+3] R3 <- p 4C: B101 R1 <- 1 4D: 1113 R1 <- R1 + R3 = 1 + R3 R1 <- 1 + p 4E: 5048 PC <- 48 goto 48 0 starting address 00: B000 R0 <- 0 R0 holds 0 01: B7FF R7 <- FF initialize stack pointer 02: B250 R2 <- 50 R2 <- address of n 03: 9220 R2 <- M[R2+0] R2 <- n 04: B102 R1 <- 2 push 0 and n 05: 2771 R7 <- R7 - R1 = R7 - 2 06: A071 M[R7+1] <- R0 push 0 07: A270 M[R7+0] <- R2 push n 08: 8630 R6 <- PC, PC <- 30 call fib(n,0) 09: B202 R2 <- 2 pop n and 0 0A: 1772 R7 <- R7 + R2 = R7 + 2 0B: 4102 print R1 print fib(n,0) 0C: 0000 halt 50: 0014 n