@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 @4 M=D //pop POINTER @0 D=A @SP A=M M=D @SP M=M+1 //push CONSTANT @0 D=A @THAT M=M+D @SP M=M-1 A=M D=M @THAT A=M M=D @0 D=A @THAT M=M-D //pop THAT @1 D=A @SP A=M M=D @SP M=M+1 //push CONSTANT @1 D=A @THAT M=M+D @SP M=M-1 A=M D=M @THAT A=M M=D @1 D=A @THAT M=M-D //pop THAT @0 D=A @ARG A=M+D D=M @SP A=M M=D @SP M=M+1 //push ARGUMENT @2 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 //SUB @0 D=A @ARG M=M+D @SP M=M-1 A=M D=M @ARG A=M M=D @0 D=A @ARG M=M-D //pop ARG (Sys.init$MAIN_LOOP_START) //LABEL @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 @Sys.init$COMPUTE_ELEMENT D;JNE //IFGOTO @Sys.init$END_PROGRAM 0;JMP //GOTO (Sys.init$COMPUTE_ELEMENT) //LABEL @0 D=A @THAT A=M+D D=M @SP A=M M=D @SP M=M+1 //push THAT @1 D=A @THAT A=M+D D=M @SP A=M M=D @SP M=M+1 //push THAT @SP M=M-1 A=M D=M A=A-1 M=M+D //ADD @2 D=A @THAT M=M+D @SP M=M-1 A=M D=M @THAT A=M M=D @2 D=A @THAT M=M-D //pop THAT @4 D=M @SP A=M M=D @SP M=M+1 //push POINTER @1 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 @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 @1 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 //SUB @0 D=A @ARG M=M+D @SP M=M-1 A=M D=M @ARG A=M M=D @0 D=A @ARG M=M-D //pop ARG @Sys.init$MAIN_LOOP_START 0;JMP //GOTO (Sys.init$END_PROGRAM) //LABEL