// This file is part of www.nand2tetris.org // and the book "The Elements of Computing Systems" // by Nisan and Schocken, MIT Press. // File name: projects/08/ProgramFlow/FibonacciSeries/FibonacciSeries.vm // Puts the first argument[0] elements of the Fibonacci series // in the memory, starting in the address given in argument[1]. // Argument[0] and argument[1] are initialized by the test script // before this code starts running. push argument 1 pop pointer 1 // that = argument[1] push constant 0 pop that 0 // first element in the series = 0 push constant 1 pop that 1 // second element in the series = 1 push argument 0 push constant 2 sub pop argument 0 // num_of_elements -= 2 (first 2 elements are set) label MAIN_LOOP_START push argument 0 if-goto COMPUTE_ELEMENT // if num_of_elements > 0, goto COMPUTE_ELEMENT goto END_PROGRAM // otherwise, goto END_PROGRAM label COMPUTE_ELEMENT push that 0 push that 1 add pop that 2 // that[2] = that[0] + that[1] push pointer 1 push constant 1 add pop pointer 1 // that += 1 push argument 0 push constant 1 sub pop argument 0 // num_of_elements-- goto MAIN_LOOP_START label END_PROGRAM