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)
|