[汇编版]二分查找法
[汇编版]二分查找法
二分查找法(Binary Search)大家都很熟悉,我就不介绍算法了,下面是我用汇编实现的二分查找法,采用的编译环境是Visual Studio2008,部署环境请参考<用Visual Studio 2008编写Win32汇编程序>。
TITLE Binary Search .386 .MODEL flat,stdcall ExitProcess PROTO, dwExitCode:DWORD .data Numbers DWORD 1,3,7,9,12,13,34,35,88,999,1011,1013 LEN DWORD ($-Numbers)/4 .code main PROC mov EBX, OFFSET Numbers mov ECX, LEN mov EDX,3 call BinarySearch main ENDP ;---------------------------------- BinarySearch PROC ;Search specific value from the array through binary search, return the index ;Receive: EBX is a pointer that point to the array, ECX is the len of array,
; EDX is the value that we try to find out ;Return: EAX is the index of the searched value ;---------------------------------- push ECX push ESI push EDI ;check parameters CMP EBX,0 JZ FAIL CMP ECX,0 JZ FAIL ;ESI will be used as the head index of the searched array, EDI will be used as the tail index of the searched array mov ESI,0 mov EDI,ECX Dec EDI ;Begin to search ;ECX will be used as the middle index, it is equal (ESI+EDI)/2; ;EAX will be used as the value that ECX point to L1: mov ECX,0 mov ECX,ESI add ECX,EDI SAR ECX,1 mov EAX,[EBX+ECX*4] CMP EAX,EDX JZ SUCCESS ;If ESI==EDI,and the search value haven't found out, go to FAIL CMP ESI,EDI JZ FAIL CMP EAX,EDX JG GREATER ;if EAX<EDX Mov ESI,ECX Inc ESI jmp L1 ;if EAX>EDX GREATER: MOV EDI,ECX Dec ESI jmp L1 SUCCESS: Mov EAX,ECX jmp FINISH FAIL: Mov EAX,-1 jmp FINISH FINISH: pop EDI pop ESI pop ECX ret BinarySearch ENDP END main
声明
本文为Binhua Liu原创作品。本文允许复制,修改,传递,但不允许用于商业用途。转载请注明出处。本文发表于2010年7月14日。