51 lines
699 B
Plaintext
51 lines
699 B
Plaintext
.sub fib
|
|
.param int n
|
|
.local int counter
|
|
.local int f
|
|
.local pmc fibs
|
|
.local int nmo
|
|
.local int nmt
|
|
|
|
fibs = new 'ResizableIntegerArray'
|
|
if n == 0 goto RETURN0
|
|
if n == 1 goto RETURN1
|
|
push fibs, 0
|
|
push fibs, 1
|
|
counter = 2
|
|
FIBLOOP:
|
|
if counter > n goto DONE
|
|
nmo = pop fibs
|
|
nmt = pop fibs
|
|
f = nmo + nmt
|
|
push fibs, nmt
|
|
push fibs, nmo
|
|
push fibs, f
|
|
inc counter
|
|
goto FIBLOOP
|
|
RETURN0:
|
|
.return( 0 )
|
|
end
|
|
RETURN1:
|
|
.return( 1 )
|
|
end
|
|
DONE:
|
|
f = pop fibs
|
|
.return( f )
|
|
end
|
|
.end
|
|
|
|
.sub main :main
|
|
.local int counter
|
|
.local int f
|
|
counter=0
|
|
LOOP:
|
|
if counter > 20 goto DONE
|
|
f = fib(counter)
|
|
print f
|
|
print "\n"
|
|
inc counter
|
|
goto LOOP
|
|
DONE:
|
|
end
|
|
.end
|