折半查找的汇编语言实现(masm)
.386
.model flat,stdcall
option casemap:none
includelib msvcrt.lib
include msvcrt.inc
printf PROTO C :ptr sbyte, :VARARG
scanf PROTO C :dword,:vararg
.data
dArray byte 15,27,39,40,68,71,82,100,220,235 ;数组中的元素,按从小到大顺序排列好
Items equ ($-dArray)
Element byte 82 ;需要查找的数
Index dword ?
Count dword ?
szFmt byte 'Found,Index=%d Count=%d Elememt=%d',0ah,0
szErrMsg byte 'Not found',0ah,0
.code
main proc
xor eax,eax
mov Index,-1
mov Count,0
mov esi,0
mov edi,Items-1
mov al,Element
Compare:
cmp esi,edi
jg NotFound
mov ebx,esi
add ebx,edi
shr ebx,1
inc Count
cmp al,dArray[EBX]
jz Found
ja MoveLow
mov edi,ebx
dec edi
jmp Compare
MoveLow:
mov esi,ebx
inc esi
jmp Compare
Found:
mov Index,ebx
xor eax,eax
mov al,dArray[ebx]
invoke printf,offset szFmt,Index,Count,eax
ret
NotFound:
invoke printf,offset szErrMsg,Count,eax
ret
main endp
end main