Advertisement
crescent72

Untitled

Dec 14th, 2016
357
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.     .model flat
  2.     .data
  3.  
  4.     array1 dword 0,1,2,3,5,7,14,21,22,32,95
  5.     key1 dword 81
  6.     index dword ?
  7.     lowindex dword 0
  8.     highindex dword ?
  9.  
  10.     .code
  11.     main proc
  12.  
  13.     mov eax, lengthof array1            ;indexlemeye 0'dan basladigimiz icin highindex'in
  14.     dec eax                             ;dizinin boyutundan bir eksik olmasi gerek
  15.     mov highindex, eax                                        
  16.  
  17.     dongu: mov esi, offset array1       ;esi'yi her dongude dizinin ilk adresine esitliyoruz
  18.     mov eax, highindex                  ;eax = highindex
  19.     add eax, lowindex                   ;eax = eax + lowindex = highindex + lowindex
  20.  
  21.     mov ebx, 2                          ;ebx = 2 . bu islemleri dizinin ortanca elemanini
  22.     sub edx, edx                        ;bulmak icin yapiyoruz. div'den once edx = 0 olmali
  23.     div ebx                             ;eax = eax / ebx = (highindex + lowindex) / 2
  24.     mov index, eax                      ;index = lowindex ile highindex'in ortasi oldu
  25.     mov ebx,4                           ;ebx = 4
  26.     mul ebx                             ;eax = eax * ebx = index * 4.
  27.  
  28.     add esi, eax                        ;esi = esi + eax = esi + index * 4
  29.     mov eax, highindex                  ;eax = highindex
  30.     cmp eax, lowindex                   ;highindex =? lowindex
  31.     je kontrol                          ;eger esitse kontrol'e git. program sonlanacak
  32.  
  33.     mov eax, key1                       ;esit degilse program devam edecek. eax = key1
  34.     cmp [esi], eax                      ;index'teki elemani key1 ile kiyasla
  35.     jl kucuk                            ;index kucukse kucuk'e zipla.
  36.     jg buyuk                            ;index buyukse buyuk'e zipla.
  37.     je bitis                            ;index = key1 ise program sonlanir. sayi bulundu.
  38.  
  39.     kontrol: mov eax, key1              ;highindex=lowindex=index durumunda burasi.      
  40.     cmp [esi], eax                      ;index'teki deger esit mi key1'e
  41.     jne bitis2                          ;esit degilse sayi bulunamadi icin bitis2'ye git.
  42.     je bitis                            ;esit ise sayi bulundu. bitis'e git.
  43.  
  44.     buyuk: mov eax, index               ;dizinin sol parcasini almak icin. eax = index
  45.     dec eax                             ;eax = eax -1
  46.     mov highindex, eax                  ;highindex = eax
  47.     jmp dongu                           ;dongu'ye don.
  48.  
  49.     kucuk: mov eax, index               ;dizinin sag parcasini almak icin. eax = index
  50.     inc eax                             ;eax = eax + 1
  51.     mov lowindex, eax                   ;lowindex = eax
  52.     jmp dongu                           ;dongu'ye don.
  53.  
  54.     bitis2: mov index, -1               ;bulunamadi icin index = -1
  55.     bitis: ret
  56.  
  57.     main endp
  58.     end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement