ismaelvazquezjr icon

Assembonacci

ismaelvazquezjr | PRO | 10/20/19 07:49:02 PM UTC | 0 ⭐ | 12514 👁️ | Never ⏰ | []
ASM (NASM) |

0 B

|

None

|

0 👍

/

0 👎

; *************************************************************************
; 32-bit Windows Console Fibonacci number calculator
; Very simple Fibonacci calculator implemented in MASM. 
; Created by Ismael Vazquez (https://www.iamismael.com)
; *************************************************************************
                                    
.386                    ; Enable 80386+ instruction set
.model flat, stdcall    ; Flat, 32-bit memory model (not used in 64-bit)
option casemap: none    ; Case insensitive syntax
 
; *************************************************************************
; MASM32 proto types for Win32 functions and structures
; *************************************************************************  
include c:\masm32\include\kernel32.inc
include c:\masm32\include\masm32.inc
         
; *************************************************************************
; MASM32 object libraries
; *************************************************************************  
includelib c:\masm32\lib\kernel32.lib
includelib c:\masm32\lib\masm32.lib
 
; *************************************************************************
; Our executable assembly code starts here in the .code section
; *************************************************************************
.code
 
start:
    Main Proc
        push 09h ; FIB(9) - Change this to get different results
        call Fib
        add esp, 04h ; remove argument off the stack
        
        call ExitProcess
        ret
    Main EndP
    Fib Proc
        ; function prologue
        push ebp
        mov ebp, esp
        
        push ebx   ; callee save register
        
        ; initialize our variables
        xor edx, edx ; f (n - 1)
        xor eax, eax ; return value
        mov ecx, 02h ; iterator
        mov ebx, 01h ; f (n - 2)
        
        ; If argument equals 0, return 0
        cmp dword ptr [ebp + 08h], 0h
        jne fib_loop
        jmp fib_exit
        
    fib_loop:
        
        ; while ECX(iterator) <= ARG
        cmp ecx, dword ptr [ebp + 08h]
        ja fib_exit
        
        ; f(n-1) += f (n-2)
        add edx, ebx
        
        ; store result in eax
        mov eax, edx
        
        ; f (n - 1) = f (n - 2)
        mov edx, ebx
        ; f (n - 2) = next number
        mov ebx, eax
        
        inc ecx
        jmp fib_loop
        
    fib_exit:
        ; restore caller save register
        pop ebx
        ; function epilogue
        mov esp, ebp
        pop ebp
        ret
    Fib EndP
end start

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎