Advertisement
Guest User

Untitled

a guest
Nov 16th, 2018
199
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .intel_syntax noprefix
  2. .section .data
  3.  
  4. n:  .quad   10      # define the fibonacci number that should be calculated
  5.  
  6. .section .text
  7.  
  8. .global _start
  9.  
  10. _start:
  11.     # call Fibonacci function f(n)
  12.     push    [n]     # parameter: fibonacci number to calculate
  13.     call    f       # call function
  14.     add rsp, 8      # remove parameter from stack
  15.  
  16.     # print calculated Fibonacci number on stdout
  17.     #call   printnumber
  18.  
  19.     # exit process with exit code 0
  20.     mov rax, 1
  21.     mov rbx, 0
  22.     int 0x80
  23.  
  24. # f: Calculates a Fibonacci number
  25. #   f(n) = {n, if n<=1; f(n-1)+f(n-2), else}.
  26. #   Parameter: Integer n >= 0, passed on stack
  27. #   Returns:   Fibonacci number f(n), returned in rax
  28. .type f, @function
  29. f:
  30.     push rbp    # basepointer auf stack pushen
  31.     mov rbp, rsp    # basepointer bekommt Wert des stackpointers
  32.     add rbp, 8  # 1.Parameter
  33.     mov rbx, [rbp]  # rbx= 1.Paramter
  34.  
  35.     cmp rbx, 0  # wenn n=0 passiert nichts, jmp zu end
  36.     je end
  37.    
  38.     cmp rbx, 1  # wenn n=1 jmp zu baseone
  39.     je baseone 
  40.  
  41.     dec rbx     # n-1
  42.     push [rbx]  # push n-1
  43.     call f      # call f(n-1)
  44.    
  45.     dec rbx     # n-2
  46.     push [rbx]  # push n-2
  47.     call f      # call f(n-2)
  48.  
  49.  
  50.  
  51. baseone: add rdi, 1     # rdi = rdi + 1
  52.    
  53. end:    pop rbp     # basepointer wieder vom Stack entfernen
  54.     ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement