Solved

Assembly programming Fibonacci Number

Posted on 2006-11-30
9
3,268 Views
Last Modified: 2016-02-10
I want to write an assembly program to generate Fibonnaci numbers. Following is the code, but it does not work.
Can anybody give me a hand

Masud

.386
.model flat
include cs266.inc
.code
      main:
            PUSH 8
            call fib
            jmp exit1
      exit1:
            putint eax
            ret
            
      fib:
            PUSH EBP
            MOV EBP, ESP
            MOV EBX, [EBP+8]      ; N
            CMP EBX, 0
            JNE notzero
            MOV EAX,1
            JMP exit
            notzero:
                  CMP EBX,1
                  Jne else
                  MOV EAX,1
                  JMP exit
                  else:
                        DEC EBX            ; N-1
                        PUSH EBX
                        CALL fib      ; fib(N-1)
                        MOV EDX, EAX       ; EDX contains fib(N-1)
                        ;PUSH EDX
                        DEC Edx            ; N-2
                        push ebx
                        CALL fib      ; fib(N-2)
                        ;POP EDX
                        ADD EAX, EDX      ; fib(n-1) + fib (n-2)
                  exit:
                        pop ebp
                        ret 4
      ret
end
0
Comment
Question by:HasanChowdhury
  • 2
  • 2
  • 2
  • +1
9 Comments
 
LVL 84

Expert Comment

by:ozo
Comment Utility
                 DEC Edx          ; N-2
shouldn't this be EBX?
0
 
LVL 8

Expert Comment

by:doraiswamy
Comment Utility
              else:                    ; here BX has N
                    DEC EBX          ; N-1
                    PUSH EBX        ; store it
                    CALL fib     ; fib(N-1) is returned in EAX
                    POP EBX
                    DEC EBX     ; n-2
                    PUSH EAX   ; store fib(n-1)
                    CALL fib     ; fib(N-2)
                    POP EDX    ; get back fib(n-1)                    
                    ADD EAX, EDX     ; fib(n-1) + fib (n-2)
               exit:
0
 
LVL 4

Expert Comment

by:hclgroup
Comment Utility
2 examples I found on the web

http://www.beroset.com/asm/fibo-masm.asm
http://www.beroset.com/asm/fibo.asm

maybe you could get some ideas from there
0
Highfive Gives IT Their Time Back

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

 

Author Comment

by:HasanChowdhury
Comment Utility
Following the update version, but it still does not work


.386
.model flat
include cs266.inc
.code
main:
      PUSH 8
      call fib
      putint eax
      jmp exit1
      exit1:
            putint eax
            ret
      fib proc
            PUSH EBP
            MOV EBP, ESP
            MOV EBX, [EBP+8]      ; N
            CMP EBX, 0
            JNE notzero
            MOV EAX,1
            JMP exit
            notzero:
                  CMP EBX,1
                  Jne else
                  MOV EAX,1
                  JMP exit
                  else:
                        DEC EBX         ; N-1
                            PUSH EBX        ; store it
                            CALL fib        ; fib(N-1) is returned in EAX
                            MOV EDX, EAX      ; store fib(N-1) to edx
                            PUSH EDX      ; save edx
                            POP EBX
                            DEC EBX           ; n-2
                            PUSH EBX           ; store fib(n-1)
                            CALL fib           ; fib(N-2), fib(n-2) in EAX
                            POP EDX            ; get back fib(n-1)                    
                            ADD EAX, EDX    ; fib(n-1) + fib (n-2)
                            putint eax
                        exit:
                              pop ebp
                              ret 4
      endp
end            

0
 
LVL 84

Accepted Solution

by:
ozo earned 63 total points
Comment Utility
                       PUSH EDX     ; save edx
                        POP EBX
Shouldn't this be done in the opposite order?
0
 

Author Comment

by:HasanChowdhury
Comment Utility
I reversed, but no output

Please review my full code
0
 
LVL 8

Assisted Solution

by:doraiswamy
doraiswamy earned 62 total points
Comment Utility
ozo => Shouldn't this be done in the opposite order? => Correct.

Hasan -> No output => what is the output function?

I found some other errors. Here is the corrected code:

.386
.model flat
include cs266.inc
.code
main:
     PUSH 8
     call fib
     putint eax
     jmp exit1
     exit1:
          putint eax
          ret
     fib proc
          PUSH EBP
          MOV EBP, ESP
          MOV EBX, [EBP+8]     ; N
          CMP EBX, 0
          JNE notzero
          MOV EAX,1
          JMP exit
          notzero:
               CMP EBX,1
               Jne else
               MOV EAX,1
               JMP exit
               else:
                    DEC EBX         ; N-1
                        PUSH EBX        ; store it
                        CALL fib        ; fib(N-1) is returned in EAX
                        MOV EDX, EAX     ; store fib(N-1) to edx
                        POP EBX    ; get (n-1)
                        PUSH EDX     ; save edx => fib(n-1)
                        DEC EBX          ; n-2
                        PUSH EBX          ;
                        CALL fib          ; fib(n-2) in EAX
                        POP EBX        ; balance stack
                        POP EDX           ; get back fib(n-1)                    
                        ADD EAX, EDX    ; fib(n-1) + fib (n-2)
                        putint eax
                    exit:
                         pop ebp
                         ret 4
     endp
end          
0

Featured Post

What Security Threats Are You Missing?

Enhance your security with threat intelligence from the web. Get trending threat insights on hackers, exploits, and suspicious IP addresses delivered to your inbox with our free Cyber Daily.

Join & Write a Comment

Suggested Solutions

RIA (Rich Internet Application) tools are interactive internet applications which have many of the characteristics of desktop applications. The RIA tools typically deliver output either by the way of a site-specific browser or via browser plug-in. T…
Although it can be difficult to imagine, someday your child will have a career of his or her own. He or she will likely start a family, buy a home and start having their own children. So, while being a kid is still extremely important, it’s also …
An introduction to basic programming syntax in Java by creating a simple program. Viewers can follow the tutorial as they create their first class in Java. Definitions and explanations about each element are given to help prepare viewers for future …
Viewers will learn how to properly install Eclipse with the necessary JDK, and will take a look at an introductory Java program. Download Eclipse installation zip file: Extract files from zip file: Download and install JDK 8: Open Eclipse and …

744 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

21 Experts available now in Live!

Get 1:1 Help Now