Fibonacci Series in Assembly x86

后端 未结 1 1323
隐瞒了意图╮
隐瞒了意图╮ 2021-01-18 07:34

Finally after a long session of countless errors , hope this is the final one.

No Compile or runtime errors, Just a logical error.

EDIT: (Fixed Pseudocode)

相关标签:
1条回答
  • 2021-01-18 07:48

    The problem was that my Actual code was not matching with my Pseudocode which resulted in the Logical error.

    This Part

         mov ebx,first       ;move first into ebx
         mov second,ebx      ;copy ebx to second [NOW second=first]
    

    This gives first value of second, but my PseudoCode says "first=second", which means give value of second to first.

         mov ebx,second      ;move second into ebx
         mov first,ebx       ;copy ebx to second [NOW first=second]
    

    Final Working Code for x86 Intel Processor:

    For any further referrers , i am posting a working code for x86 intel

    .386
    .model flat,stdcall
    option casemap:none
    
    .data
    timestell   db   "Loop Ran : %d Times -----",0          ;format string
    finalprint  db   "%d th Fibonacci number is %d",0       ;format string
    times       dd   14h                                    ;times to loop
    first dd 1h
    second dd 1h
    third dd 0h
    
    
    
    .code
    include windows.inc
    include user32.inc
    includelib user32.lib
    include kernel32.inc
    includelib kernel32.lib
    includelib MSVCRT
    extrn printf:near
    extrn exit:near
    
    public main
    main proc
    
    
             mov ecx, times       ;set loop counter to "times" time
             sub ecx,2            ;loop times-2 times
    
          top:
             cmp ecx, 0          ; test at top of loop
             je bottom           ; loop exit when while condition false
             xor ebx,ebx         ;Clear ebx
             mov ebx,first       ;move first into ebx
             add ebx,second      ;add ebx, [ first+second ]
             mov third,ebx       ;Copy result i.e ebx [first+second] to third
             xor ebx,ebx         ;clear for further use
             mov ebx,second      ;move second into ebx
             mov first,ebx       ;copy ebx to second [NOW first=second]
             xor ebx,ebx         ;clear for later use
             mov ebx,third       ;move thirs into ebx
             mov second,ebx      ;copy ebx to third [NOW second=third]
             xor ebx,ebx         ;clear it
             dec ecx             ;decrement loop
             jmp top             ;Loop again
    
          bottom:
            push third
                  push times                ;push value of third to printf
                  push offset finalprint    ;push the format string
                  call printf               ;Print the final number
          push 0        ;exit gracefully
             call exit      ;exit system
    
        main endp
    
    end main
    
    0 讨论(0)
提交回复
热议问题