Created
April 10, 2013 20:56
-
-
Save gitnik/5358376 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
; ---------------------------------------------------------------------------- | |
; fib.asm | |
; | |
; This is a Win32 console program that writes the first 40 Fibonacci numbers. | |
; It needs to be linked with a C library. | |
; ---------------------------------------------------------------------------- | |
global _main | |
extern _printf | |
section .text | |
_main: | |
push ebx ; we have to save this since we use it | |
mov ecx, 40 ; ecx will countdown from 40 to 0 | |
xor eax, eax ; eax will hold the current number | |
xor ebx, ebx ; ebx will hold the next number | |
inc ebx ; ebx is originally 1 | |
print: | |
; We need to call printf, but we are using eax, ebx, and ecx. printf | |
; may destroy eax and ecx so we will save these before the call and | |
; restore them afterwards. | |
push eax | |
push ecx | |
push eax | |
push format | |
call _printf | |
add esp, 8 | |
pop ecx | |
pop eax | |
mov edx, eax ; save the current number | |
mov eax, ebx ; next number is now current | |
add ebx, edx ; get the new next number | |
dec ecx ; count down | |
jnz print ; if not done counting, do some more | |
pop ebx ; restore ebx before returning | |
ret | |
format: | |
db '%d', 0x0a |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment