@256 D=A @SP M=D @MainLoopXYZRA 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.init 0;JMP (MainLoopXYZRARA) //CALLFUNC (Sys.init) @6 D=A @SP A=M M=D @SP M=M+1 //push CONSTANT @8 D=A @SP A=M M=D @SP M=M+1 //push CONSTANT @Class1.set5RA 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 @2 D=D-A @5 D=D-A @ARG M=D @SP D=M @LCL M=D @Class1.set 0;JMP (Class1.set5RA) //CALLFUNC @SP M=M-1 A=M D=M @5 M=D //pop TMP @23 D=A @SP A=M M=D @SP M=M+1 //push CONSTANT @15 D=A @SP A=M M=D @SP M=M+1 //push CONSTANT @Class2.set6RA 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 @2 D=D-A @5 D=D-A @ARG M=D @SP D=M @LCL M=D @Class2.set 0;JMP (Class2.set6RA) //CALLFUNC @SP M=M-1 A=M D=M @5 M=D //pop TMP @Class1.get7RA 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 @Class1.get 0;JMP (Class1.get7RA) //CALLFUNC @Class2.get8RA 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 @Class2.get 0;JMP (Class2.get8RA) //CALLFUNC (Sys.init$WHILE) //LABEL @Sys.init$WHILE 0;JMP //GOTO (Class1.set) @0 D=A @ARG A=M+D D=M @SP A=M M=D @SP M=M+1 //push ARGUMENT @SP M=M-1 A=M D=M @Class1.0 M=D //pop STATIC @1 D=A @ARG A=M+D D=M @SP A=M M=D @SP M=M+1 //push ARGUMENT @SP M=M-1 A=M D=M @Class1.1 M=D //pop STATIC @0 D=A @SP A=M M=D @SP M=M+1 //push CONSTANT @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 (Class1.get) @Class1.0 D=M @SP A=M M=D @SP M=M+1 //push STATIC @Class1.1 D=M @SP A=M M=D @SP M=M+1 //push STATIC @SP M=M-1 A=M D=M A=A-1 M=M-D //SUB @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 (Class2.set) @0 D=A @ARG A=M+D D=M @SP A=M M=D @SP M=M+1 //push ARGUMENT @SP M=M-1 A=M D=M @Class2.0 M=D //pop STATIC @1 D=A @ARG A=M+D D=M @SP A=M M=D @SP M=M+1 //push ARGUMENT @SP M=M-1 A=M D=M @Class2.1 M=D //pop STATIC @0 D=A @SP A=M M=D @SP M=M+1 //push CONSTANT @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 (Class2.get) @Class2.0 D=M @SP A=M M=D @SP M=M+1 //push STATIC @Class2.1 D=M @SP A=M M=D @SP M=M+1 //push STATIC @SP M=M-1 A=M D=M A=A-1 M=M-D //SUB @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