fib.asm

URL: https://mirkwood.cs.edinboro.edu/~bennett/class/cmsc3100/spring2026/notes/functions/code/fib.asm
 
%include "CONSTANTS.h"

section .data

    outputFMT: db `Fib(%d) = %ld\n`,0

section .bss

section .text

global main
main:

    mov r12, 0

.loopTop:
    cmp r12, 20
    je .done

    mov rdi, r12
    call FIB

    mov rdi, outputFMT
    mov rsi, r12
    mov rdx, rax
    call CallPrintf

    inc r12
    jmp .loopTop
  
.done:
    jmp Exit

; rdi holds n
; assume n is a positive non-negative integer
FIB:
   push rbp
   mov rbp, rsp

   cmp rdi, 0
   je .base
   cmp rdi, 1
   je .base

   sub rdi, 1
   push rdi
   call  FIB

   pop rdi
   sub rdi, 1

   push rax
   call FIB
   pop r8 ; reload the old value of rax, or Fib(n-1)

   add rax, r8
   jmp .done

.base:
   mov rax, 1

.done:
   pop rbp
   ret