Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .model flat
- .data
- array1 dword 0,1,2,3,5,7,14,21,22,32,95
- key1 dword 81
- index dword ?
- lowindex dword 0
- highindex dword ?
- .code
- main proc
- mov eax, lengthof array1 ;indexlemeye 0'dan basladigimiz icin highindex'in
- dec eax ;dizinin boyutundan bir eksik olmasi gerek
- mov highindex, eax
- dongu: mov esi, offset array1 ;esi'yi her dongude dizinin ilk adresine esitliyoruz
- mov eax, highindex ;eax = highindex
- add eax, lowindex ;eax = eax + lowindex = highindex + lowindex
- mov ebx, 2 ;ebx = 2 . bu islemleri dizinin ortanca elemanini
- sub edx, edx ;bulmak icin yapiyoruz. div'den once edx = 0 olmali
- div ebx ;eax = eax / ebx = (highindex + lowindex) / 2
- mov index, eax ;index = lowindex ile highindex'in ortasi oldu
- mov ebx,4 ;ebx = 4
- mul ebx ;eax = eax * ebx = index * 4.
- add esi, eax ;esi = esi + eax = esi + index * 4
- mov eax, highindex ;eax = highindex
- cmp eax, lowindex ;highindex =? lowindex
- je kontrol ;eger esitse kontrol'e git. program sonlanacak
- mov eax, key1 ;esit degilse program devam edecek. eax = key1
- cmp [esi], eax ;index'teki elemani key1 ile kiyasla
- jl kucuk ;index kucukse kucuk'e zipla.
- jg buyuk ;index buyukse buyuk'e zipla.
- je bitis ;index = key1 ise program sonlanir. sayi bulundu.
- kontrol: mov eax, key1 ;highindex=lowindex=index durumunda burasi.
- cmp [esi], eax ;index'teki deger esit mi key1'e
- jne bitis2 ;esit degilse sayi bulunamadi icin bitis2'ye git.
- je bitis ;esit ise sayi bulundu. bitis'e git.
- buyuk: mov eax, index ;dizinin sol parcasini almak icin. eax = index
- dec eax ;eax = eax -1
- mov highindex, eax ;highindex = eax
- jmp dongu ;dongu'ye don.
- kucuk: mov eax, index ;dizinin sag parcasini almak icin. eax = index
- inc eax ;eax = eax + 1
- mov lowindex, eax ;lowindex = eax
- jmp dongu ;dongu'ye don.
- bitis2: mov index, -1 ;bulunamadi icin index = -1
- bitis: ret
- main endp
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement