Fibonacci number example
This is a Fibonacci element computation from one of the regression tests. It’s something of an odd mix, dating to when CALL
and RETURN
weren’t implemented yet.
This program takes an input x
, which the program does not modify, and eventually produces an output answer
containing the x
th Fibonacci number. If x
is too large, overflow will eventually be detected during addition, the R
(ange) flag will be set, and answer
will come back all ones.
Sample code
; Compute 'x'th Fibonacci number, 0 <= x <= 53 unsigned x ; input to fib subroutine x = 53 ; seeking 53rd Fibonacci number jump fib ; go compute it back: ; call and return were not tested halt ; answer in last stored register fib: unsigned answer ; output from fib subroutine unsigned i ; highest computed x unsigned next ; temporary new answer unsigned prev ; previous answer i = 1 ; special case when x <= 1 cmp x - i jump <= small prev = 0 ; fib(0) answer = 1 ; fib(1) loop: next = prev + answer ; fib(x+1) = fib(x) + fib(x-1) jump +t toobig ; arithmetic overflow? i = i + 1 ; computed one more term prev = answer ; keep previous two terms answer = next cmp x - i ; have xth term yet? jump != loop ; no, keep going jump back ; yes, done small: answer = x ; fib(x) = x when x <= 1 jump back ; done toobig: answer = 0 - 1 ; out of range indication for test jump back ; done