ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2진 검색(binary search) - MASM
    알고리즘 2013. 6. 5. 19:32

    TITLE  Binary Search Procedure                  (Bsearch.asm)


    ; INVOKE BinarySearch, ADDR array, ARRAY_SIZE, eax


    .386

    .MODEL flat,stdcall

    .STACK 4096


    .code

    BinarySearch PROC USES ebx edx esi edi,

    pArray:PTR DWORD, ; pointer to array

    Count:DWORD, ; array size

    searchVal:DWORD ; search value


    LOCAL first:DWORD, ; first position

    last:DWORD, ; last position

    mid:DWORD ; midpoint


    mov first,0 ; first = 0

    mov eax,Count ; last = (count - 1)

    dec eax

    mov last,eax

    mov edi,searchVal ; EDI = searchVal

    mov ebx,pArray ; EBX points to the array


    L1: ; while first <= last

    mov eax,first

    cmp eax,last

    jg L5 ; exit search


    ; mid = (last + first) / 2

    mov eax,last

    add eax,first

    shr eax,1

    mov mid,eax


    ; EDX = values[mid]

    mov esi,mid

    shl esi,2 ; scale mid value by 4

    mov edx,[ebx+esi] ; EDX = values[mid]


    ; if ( EDX < searchval(EDI) )

    ; first = mid + 1;

    cmp edx,edi

    jge L2

    mov eax,mid ; first = mid + 1

    inc eax

    mov first,eax

    jmp L4


    ; else if( EDX > searchVal(EDI) )

    ; last = mid - 1;

    L2: cmp edx,edi ; optional

    jle L3

    mov eax,mid ; last = mid - 1

    dec eax

    mov last,eax

    jmp L4


    ; else return mid

    L3: mov eax,mid   ; value found

    jmp L9 ; return (mid)


    L4: jmp L1 ; continue the loop


    L5: mov eax,-1 ; search failed

    L9: ret

    BinarySearch ENDP

    END


Designed by Tistory.