;#Mode=Dos
;explain:
;折半查找:
; 输入十进制检索key,折半检索目标数组,根据查询结果有无对应返回'Y','N'
;ID: 53101512
;DATE: 2011-11-16
;AUTHOR: ZhongQiang
data segment
score db 2,3,45,65,66,89,99
num equ $-score-1
message db 'Please input the KEY:','$'
crlf db 0dh,0ah,'$'
nozero db ?
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
call output
call search
mov ah,1
int 21h
mov ah,4ch
int 21h
search proc
lea dx,message
call printstring
call inputdec
mov dh,bl
mov bx,offset Score
mov cl,num
xor ax,ax
xor ch,ch
L1:
cmp al,cl
jg L3
mov di,ax
add di,cx
sar di,1
cmp dh,[bx+di]
jz L4
cmp dh,[bx+di]
jb L2
inc di
mov ax,di
jmp L1
L2:
dec di
mov cx,di
jmp L1
L3:
mov dl,'N'
jmp L5
L4:
mov dl,'Y'
L5:
call printchar
ret
search endp
inputdec proc
push cx
mov bx,0
p1:
mov ah,1
int 21h
cmp al,0dh
je decexit
sub al,30h
mov ah,0
xchg ax,bx
mov cx,10
mul cx
xchg ax,bx
add bx,ax
jmp p1
decexit:
lea dx,crlf
call printstring
pop cx
ret
inputdec endp
printstring proc
mov ah,9
int 21h
ret
printstring endp
printchar proc
mov ah,2
int 21h
ret
printchar endp
outputdec proc
push cx
mov nozero,0
mov cx,10000
call main
mov cx,1000
call main
mov cx,100
call main
mov cx,10
call main
mov cx,1
call main
cmp nozero,0
jne ll
mov dl,30h
call printchar
ll:
pop cx
ret
main proc
mov ax,bx
mov dx,0
div cx
mov bx,dx
mov dl,al
cmp dl,0
jne ll1
cmp nozero,0
jne ll1
jmp ll2
ll1:
mov nozero,1
add dl,30h
call printchar
ll2:
ret
main endp
outputdec endp
output proc
lea si,Score
mov cl,num+1
next:
mov bl,[si]
call outputdec
mov dl,','
call printchar
inc si
dec cl
jnz next
lea dx,crlf
call printstring
ret
output endp
code ends
end start
本文详细介绍了折半查找算法的基本原理、实现步骤,并通过代码示例展示了如何使用DOS环境下的汇编语言实现折半查找过程。文章强调了算法的时间复杂度优势及其在有序数组检索中的应用。
1684

被折叠的 条评论
为什么被折叠?



