// push constant 3030 @3030 D = A @SP A = M M = D @SP M = M + 1 // pop pointer THIS @SP A = M A = A - 1 D = M @SP M = M - 1 @THIS M = D // ^ pop into THIS // push constant 3040 @3040 D = A @SP A = M M = D @SP M = M + 1 // pop pointer THAT @SP A = M A = A - 1 D = M @SP M = M - 1 @THAT M = D // ^ pop into THAT // push constant 32 @32 D = A @SP A = M M = D @SP M = M + 1 // pop this 2 @2 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 46 @46 D = A @SP A = M M = D @SP M = M + 1 // pop that 6 @6 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 pointer THIS @THIS D = M @SP A = M M = D @SP M = M + 1 // ^ push THIS // push pointer THAT @THAT D = M @SP A = M M = D @SP M = M + 1 // ^ push THAT // 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 this 2 @2 D = A @THIS 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 that 6 @6 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