26 lines
760 B
ArmAsm
26 lines
760 B
ArmAsm
|
# Interative Fibonnaci
|
||
|
# %rdi is the number for iterations.
|
||
|
|
||
|
fib: push %rbp # push previous base pointer
|
||
|
movq %rsp,%rbp # setup new base pointer
|
||
|
|
||
|
if: cmpq $1, %rdi # if (a-1) > 0: goto loops
|
||
|
jg loops
|
||
|
|
||
|
quick: movq %rdi, %rax
|
||
|
jmp return
|
||
|
|
||
|
loops: movq %rdi, %r8 # i (r8) = a
|
||
|
movq $1, %rdi # minus_one (rdi) = 1
|
||
|
movq $0, %rax # minus_two (rax) = 0
|
||
|
|
||
|
loopb: movq %rdi, %9 # r = minus_one
|
||
|
addq %rax, %rdi # minus_one += minus_two
|
||
|
movq %9, %rax # minus_two = r
|
||
|
subq $1, %r8 # i--
|
||
|
cmpq $0, %r8 # if a > 0
|
||
|
jg loopb
|
||
|
|
||
|
return: leave # Clean up
|
||
|
ret # return m (rax)
|