// function SimpleFunction.test 2 (SimpleFunction.test) @0 D = A @SP A = M M = D @SP M = M + 1 // ^ push 0 @SP A = M M = D @SP M = M + 1 // ^ push 0 // ^ push 0 * 2 // 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 local 1 @1 D = A @LCL 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 // not @SP A = M A = A - 1 M = !M // push argument 0 @0 D = A @ARG 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 // return @LCL D = M @R13 M = D // ^ R13 = FRAME = LCL @5 D = A @R13 D = M - D @R14 M = D // ^ R14 = RET = *(FRAME - 5) @SP A = M A = A - 1 D = M @SP M = M - 1 @ARG A = M M = D // ^ POP into *ARG @ARG D = M + 1 @SP M = D // ^ SP = ARG + 1 @1 D = A @R13 A = M - D D = M @THAT M = D // ^ THAT = *(FRAME - 1) @2 D = A @R13 A = M - D D = M @THIS M = D // ^ THIS = *(FRAME - 2) @3 D = A @R13 A = M - D D = M @ARG M = D // ^ ARG = *(FRAME - 3) @4 D = A @R13 A = M - D D = M @LCL M = D // ^ LCL = *(FRAME - 4) @R14 A = M A = M 0;JMP // ^ goto RET