// push constant 10 @10 D = A @SP A = M M = D @SP M = M + 1 // pop local 0 @0 D = A @LCL A = M D = D + A @R13 M = D // ^ R13 = local + index @SP A = M A = A - 1 D = M @SP M = M - 1 // ^ pop into D @R13 A = M M = D // ^ *R13 = D // push constant 21 @21 D = A @SP A = M M = D @SP M = M + 1 // push constant 22 @22 D = A @SP A = M M = D @SP M = M + 1 // pop argument 2 @2 D = A @ARG A = M D = D + A @R13 M = D // ^ R13 = argument + index @SP A = M A = A - 1 D = M @SP M = M - 1 // ^ pop into D @R13 A = M M = D // ^ *R13 = D // pop argument 1 @1 D = A @ARG A = M D = D + A @R13 M = D // ^ R13 = argument + index @SP A = M A = A - 1 D = M @SP M = M - 1 // ^ pop into D @R13 A = M M = D // ^ *R13 = D // push constant 36 @36 D = A @SP A = M M = D @SP M = M + 1 // pop this 6 @6 D = A @THIS A = M D = D + A @R13 M = D // ^ R13 = this + index @SP A = M A = A - 1 D = M @SP M = M - 1 // ^ pop into D @R13 A = M M = D // ^ *R13 = D // push constant 42 @42 D = A @SP A = M M = D @SP M = M + 1 // push constant 45 @45 D = A @SP A = M M = D @SP M = M + 1 // pop that 5 @5 D = A @THAT A = M D = D + A @R13 M = D // ^ R13 = that + index @SP A = M A = A - 1 D = M @SP M = M - 1 // ^ pop into D @R13 A = M M = D // ^ *R13 = D // pop that 2 @2 D = A @THAT A = M D = D + A @R13 M = D // ^ R13 = that + index @SP A = M A = A - 1 D = M @SP M = M - 1 // ^ pop into D @R13 A = M M = D // ^ *R13 = D // push constant 510 @510 D = A @SP A = M M = D @SP M = M + 1 // pop temp 6 @6 D = A @5 A = D + A D = A @R13 M = D // ^ R13 = temp + index @SP A = M A = A - 1 D = M @SP M = M - 1 // ^ pop into D @R13 A = M M = D // ^ *R13 = D // push local 0 @0 D = A @LCL A = M A = D + A D = M // ^ D = *(LCL + index) @SP A = M M = D @SP M = M + 1 // ^ push D // push that 5 @5 D = A @THAT A = M A = D + A D = M // ^ D = *(LCL + index) @SP A = M M = D @SP M = M + 1 // ^ push D // add @SP A = M A = A - 1 A = A - 1 D = M A = A + 1 D = D + M A = A - 1 M = D @SP M = M - 1 // push argument 1 @1 D = A @ARG A = M A = D + A D = M // ^ D = *(LCL + index) @SP A = M M = D @SP M = M + 1 // ^ push D // sub @SP A = M A = A - 1 A = A - 1 D = M A = A + 1 D = D - M A = A - 1 M = D @SP M = M - 1 // push this 6 @6 D = A @THIS A = M A = D + A D = M // ^ D = *(LCL + index) @SP A = M M = D @SP M = M + 1 // ^ push D // push this 6 @6 D = A @THIS A = M A = D + A D = M // ^ D = *(LCL + index) @SP A = M M = D @SP M = M + 1 // ^ push D // add @SP A = M A = A - 1 A = A - 1 D = M A = A + 1 D = D + M A = A - 1 M = D @SP M = M - 1 // sub @SP A = M A = A - 1 A = A - 1 D = M A = A + 1 D = D - M A = A - 1 M = D @SP M = M - 1 // push temp 6 @6 D = A @5 A = D + A D = M // ^ D = *(temp + index) @SP A = M M = D @SP M = M + 1 // ^ push D // add @SP A = M A = A - 1 A = A - 1 D = M A = A + 1 D = D + M A = A - 1 M = D @SP M = M - 1