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)
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