Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

Assembly programming Fibonacci Number

Posted on 2006-11-30
9
Medium Priority
?
3,390 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
  • 2
  • 2
  • +1
9 Comments
 
LVL 84

Expert Comment

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

Expert Comment

by:doraiswamy
ID: 18052089
              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
ID: 18054122
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
Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

 

Author Comment

by:HasanChowdhury
ID: 18078666
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 252 total points
ID: 18079642
                       PUSH EDX     ; save edx
                        POP EBX
Shouldn't this be done in the opposite order?
0
 

Author Comment

by:HasanChowdhury
ID: 18079949
I reversed, but no output

Please review my full code
0
 
LVL 8

Assisted Solution

by:doraiswamy
doraiswamy earned 248 total points
ID: 18087142
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

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article will inform Clients about common and important expectations from the freelancers (Experts) who are looking at your Gig.
We live in a world of interfaces like the one in the title picture. VBA also allows to use interfaces which offers a lot of possibilities. This article describes how to use interfaces in VBA and how to work around their bugs.
Simple Linear Regression
Progress

636 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