Finally, after a long session of countless errors, I hope this is the last.
No compilation or execution errors, just a logical error.
EDIT: (Fixed Pseudocode)
My pseudo code:
first = 1; second = 1; third = 0; for i from 1 to n{ third=first+second first=second second=third } return third
This will print the final result of the series.
My build code:
I added comments where ever possible
.386 .model flat,stdcall option casemap:none .data timestell db "Loop Ran : %d Times -----",0 ;format string fmtd db "%d",0 finalprint db "Final Number is : %d ------",0 ;format string times dd 0Ah ;times to loop first dd 1h second dd 1h third dd 0h .data? retvalue1 dd ? ;we will initialize it later .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 ;loop "times" times mov eax,0 ;just to store number of times loop ran top: ;body of loop cmp ecx, 0 ;test at top of loop je bottom ;loop exit when while condition false add eax,1 ;Just to test number of times loop ran mov ebx,first ;move first into ebx add ebx,second ;add ebx, [ first+second ] mov third,ebx ;Copy result ie ebx [first+second] to third xor ebx,ebx ;clear for further use mov ebx,first ;move first into ebx mov second,ebx ;copy ebx to second [NOW second=first] 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: mov retvalue1,eax ;store eax into a variable push retvalue1 ;pass this variable to printf push offset timestell ;pass Format string to printf call printf ;Print no. of times loop ran push third ;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
The code works well, but the result does not satisfy me:
Output: Loop Ran : 10 Times -----Final Number is : 11 ------
First of all, I'm not sure if the final number is in decimal or hexadecimal.
- Assuming this as a decimal: the Fibonacci series doesn't have 11
- Assuming this as hex: the Fibonacci series does not have 17 (11 hex = 17 dec)
What am I doing wrong?
assembly x86 fibonacci
Idkwhoami
source share