(Sys.init) @4000 D=A @SP A=M M=D @SP M=M+1 //push CONSTANT @SP M=M-1 A=M D=M @3 M=D //pop POINTER @5000 D=A @SP A=M M=D @SP M=M+1 //push CONSTANT @SP M=M-1 A=M D=M @4 M=D //pop POINTER @Sys.main3RA D=A @SP A=M M=D @SP M=M+1 @LCL D=M @SP A=M M=D @SP M=M+1 @ARG D=M @SP A=M M=D @SP M=M+1 @THIS D=M @SP A=M M=D @SP M=M+1 @THAT D=M @SP A=M M=D @SP M=M+1 @SP D=M @0 D=D-A @5 D=D-A @ARG M=D @SP D=M @LCL M=D @Sys.main 0;JMP (Sys.main3RA) //CALLFUNC @SP M=M-1 A=M D=M @6 M=D //pop TMP (Sys.init$LOOP) //LABEL @Sys.init$LOOP 0;JMP //GOTO (Sys.main) @0 D=A @SP A=M M=D @SP M=M+1 //DEFINEFUNC @0 D=A @SP A=M M=D @SP M=M+1 //DEFINEFUNC @0 D=A @SP A=M M=D @SP M=M+1 //DEFINEFUNC @0 D=A @SP A=M M=D @SP M=M+1 //DEFINEFUNC @0 D=A @SP A=M M=D @SP M=M+1 //DEFINEFUNC @4001 D=A @SP A=M M=D @SP M=M+1 //push CONSTANT @SP M=M-1 A=M D=M @3 M=D //pop POINTER @5001 D=A @SP A=M M=D @SP M=M+1 //push CONSTANT @SP M=M-1 A=M D=M @4 M=D //pop POINTER @200 D=A @SP A=M M=D @SP M=M+1 //push CONSTANT @1 D=A @LCL M=M+D @SP M=M-1 A=M D=M @LCL A=M M=D @1 D=A @LCL M=M-D //pop LOCAL @40 D=A @SP A=M M=D @SP M=M+1 //push CONSTANT @2 D=A @LCL M=M+D @SP M=M-1 A=M D=M @LCL A=M M=D @2 D=A @LCL M=M-D //pop LOCAL @6 D=A @SP A=M M=D @SP M=M+1 //push CONSTANT @3 D=A @LCL M=M+D @SP M=M-1 A=M D=M @LCL A=M M=D @3 D=A @LCL M=M-D //pop LOCAL @123 D=A @SP A=M M=D @SP M=M+1 //push CONSTANT @Sys.add124RA D=A @SP A=M M=D @SP M=M+1 @LCL D=M @SP A=M M=D @SP M=M+1 @ARG D=M @SP A=M M=D @SP M=M+1 @THIS D=M @SP A=M M=D @SP M=M+1 @THAT D=M @SP A=M M=D @SP M=M+1 @SP D=M @1 D=D-A @5 D=D-A @ARG M=D @SP D=M @LCL M=D @Sys.add12 0;JMP (Sys.add124RA) //CALLFUNC @SP M=M-1 A=M D=M @5 M=D //pop TMP @0 D=A @LCL A=M+D D=M @SP A=M M=D @SP M=M+1 //push LOCAL @1 D=A @LCL A=M+D D=M @SP A=M M=D @SP M=M+1 //push LOCAL @2 D=A @LCL A=M+D D=M @SP A=M M=D @SP M=M+1 //push LOCAL @3 D=A @LCL A=M+D D=M @SP A=M M=D @SP M=M+1 //push LOCAL @4 D=A @LCL A=M+D D=M @SP A=M M=D @SP M=M+1 //push LOCAL @SP M=M-1 A=M D=M A=A-1 M=M+D //ADD @SP M=M-1 A=M D=M A=A-1 M=M+D //ADD @SP M=M-1 A=M D=M A=A-1 M=M+D //ADD @SP M=M-1 A=M D=M A=A-1 M=M+D //ADD @LCL D=M @R13 M=D @5 D=A @R13 D=M-D A=D D=M @R14 M=D @SP A=M-1 D=M @ARG A=M M=D @ARG D=M+1 @SP M=D @R13 M=M-1 A=M D=M @THAT M=D @R13 M=M-1 A=M D=M @THIS M=D @R13 M=M-1 A=M D=M @ARG M=D @R13 M=M-1 A=M D=M @LCL M=D @R14 A=M 0;JMP //RETURN (Sys.add12) @4002 D=A @SP A=M M=D @SP M=M+1 //push CONSTANT @SP M=M-1 A=M D=M @3 M=D //pop POINTER @5002 D=A @SP A=M M=D @SP M=M+1 //push CONSTANT @SP M=M-1 A=M D=M @4 M=D //pop POINTER @0 D=A @ARG A=M+D D=M @SP A=M M=D @SP M=M+1 //push ARGUMENT @12 D=A @SP A=M M=D @SP M=M+1 //push CONSTANT @SP M=M-1 A=M D=M A=A-1 M=M+D //ADD @LCL D=M @R13 M=D @5 D=A @R13 D=M-D A=D D=M @R14 M=D @SP A=M-1 D=M @ARG A=M M=D @ARG D=M+1 @SP M=D @R13 M=M-1 A=M D=M @THAT M=D @R13 M=M-1 A=M D=M @THIS M=D @R13 M=M-1 A=M D=M @ARG M=D @R13 M=M-1 A=M D=M @LCL M=D @R14 A=M 0;JMP //RETURN