Win32 Assembly: Fibonacci Sayı Dizisi Hesaplamak

Kategori Assembly, Belgeler
27.06.2016
3103 Okunma

Esen;
Arkadaşlar daha önce Fibonacci Dizisini hesaplayan bir programı hazırlayıp buraya eklemiştim. Hatta aşağıdaki dosyadan da indirebilirsiniz:
[dm]105[/dm]

Komut satırına yazdırma fonksiyonları ile çalışırken Fibonacci dizisini komut satırına yazan bir uygulama daha yazdım. Burada dursun.

[dm]132[/dm]

.386					;kullandığımız opcodeların hangi işlemci setine bağlı olduğu
.model flat, stdcall	;32 bit hafıza modeli
option casemap :none	;büyük küçük harfe duyarlı

include windows.inc
include masm32.inc

include user32.inc
include kernel32.inc
include msvcrt.inc

include \masm32\macros\macros.asm         ; masm32 makro dosyası

includelib masm32.lib

includelib user32.lib
includelib kernel32.lib
includelib msvcrt.lib

.stack 4096

.const

.data
	ksBaslik	db "Komut Satirinda Fibonacci Dizisi",0

.data?
	;genelTampon db 1024 (?)

.code
start:
	
	call main
	exit
	
main proc
    LOCAL tampon1:DWORD            ; DWORD boyutunda bir değişken tanımladım
    LOCAL tampon2:DWORD
    
    ;Bu api ile komut satırı penceresine başlık atabiliyoruz:
    invoke SetConsoleTitle,addr ksBaslik
    
    invoke ClearScreen				;ekranı temizler
    
    printf("**************************************************************\n")
    printf("*       Komut Satirinda Fibonacci Sayilari Listeleyici       *\n")
    printf("**************************************************************\n\n")
	mov tampon1, input("Bir tamsayi giriniz",9,9,":")
	mov tampon1, uval(tampon1)
	
	mov tampon2,0
	print chr$("0",13,10);dizi 0 ile başlıyor
	mov eax,0			;eax = 0
	mov ebx,1			;ebx = 1
	
	_dongubasi:
	xchg eax,ebx		;eax ve ebx değerlerinin yerini değiştir
	add eax,ebx			;eax = eax + ebx
	cmp eax,tampon1		;kümülatif eax değeri kullanıcının girdiği sayıdan büyük oldu mu?
	ja _Son				;evet büyükse Son a dallan 
	mov tampon2,eax		;küçükse eax içindeki değeri tampona ata
	
	push eax			;eaxi yığına at

	print str$(tampon2)
	print chr$(13,10)
	;invoke wsprintfA, addr tampon, addr format,tampon;onluka tabana çevir
	;invoke SendMessage,hSerial,LB_ADDSTRING,0,addr tampon;listeye yaz
	pop eax				;yığından eax değerini çağır
	cmp eax,tampon1		;tekrar kontrol
	jb _dongubasi		;küçükse döngübaşına dallan ve tekrar çalışıtır
	
	
_Son:
	xor eax,eax
	
	inkey
	;mov   eax, input(13,10,"Cikmak icin bir tusa bas...") ; bu da konsol penceresenin hemen kapanmaması için bir başka yöntem
	invoke ExitProcess,0
main endp

end start

Comments of this post

Henüz yorum bulunmuyor!