@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) @4 D=A @SP A=M M=D @SP M=M+1 //push CONSTANT @Main.fibonacci2RA 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 @Main.fibonacci 0;JMP (Main.fibonacci2RA) //CALLFUNC (Sys.init$WHILE) //LABEL @Sys.init$WHILE 0;JMP //GOTO (Main.fibonacci) @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 D=M-D @TRUE0 D;JLT @SP A=M A=A-1 M=0 @FALSE0 0;JMP (TRUE0) @SP A=M A=A-1 M=-1 (FALSE0) //LT @SP M=M-1 A=M D=M @Main.fibonacci$IF_TRUE D;JNE //IFGOTO @Main.fibonacci$IF_FALSE 0;JMP //GOTO (Main.fibonacci$IF_TRUE) //LABEL @0 D=A @ARG A=M+D D=M @SP A=M M=D @SP M=M+1 //push ARGUMENT @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 (Main.fibonacci$IF_FALSE) //LABEL @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 @Main.fibonacci0RA 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 @Main.fibonacci 0;JMP (Main.fibonacci0RA) //CALLFUNC @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 @Main.fibonacci1RA 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 @Main.fibonacci 0;JMP (Main.fibonacci1RA) //CALLFUNC @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