帮忙写个注释,折半查表
时间:2010-12-07
来源:互联网
在附加段中,有个从小到大排序的无符号数组,首地址在DI,数组第一个单元存放数组长度。在AX中有个无符号数,要求在数组中查找(AX),如果找到,使CF=0,并在SI中给出该元素在数组中的偏移;如果没找到。则CF=1.
data segment
low_idx dw ?
high_idx dw ?
data ends
code segment
b_search proc near
assume cs:code,ds:data,es:data
start:
push ds
push ax
mov ax,data
mov ds,ax
mov es,ax
pop ax
cmp ax,es:[di+2]
ja chk_last
lea si,es:[di+2]
je exit
stc
jmp exit
chk_last:mov si,es:[di]
shl si,1
add si,di
cmp ax,es:[si]
jb cearch
je exit
stc
jmp exit
search: mov low_idx,1
mov bx,es:[di]
mov high_idx,bx
mov bx,di
mid :mov cx,low_idx
mov dx,high_idx
cmp cx,dx
ja no_match
add cx,dx
shr cx,1
mov si,cx
shl si,1
compare : cmp ax,es:[bx+si]
je exit
ja higher
dec cx
mov high_idx,cx
jmp mid
higher:inc cx
mov low_idx,cx
jmp mid
no_match: stc
exit :pop ds
ret
b_search endp
code ends
end
data segment
low_idx dw ?
high_idx dw ?
data ends
code segment
b_search proc near
assume cs:code,ds:data,es:data
start:
push ds
push ax
mov ax,data
mov ds,ax
mov es,ax
pop ax
cmp ax,es:[di+2]
ja chk_last
lea si,es:[di+2]
je exit
stc
jmp exit
chk_last:mov si,es:[di]
shl si,1
add si,di
cmp ax,es:[si]
jb cearch
je exit
stc
jmp exit
search: mov low_idx,1
mov bx,es:[di]
mov high_idx,bx
mov bx,di
mid :mov cx,low_idx
mov dx,high_idx
cmp cx,dx
ja no_match
add cx,dx
shr cx,1
mov si,cx
shl si,1
compare : cmp ax,es:[bx+si]
je exit
ja higher
dec cx
mov high_idx,cx
jmp mid
higher:inc cx
mov low_idx,cx
jmp mid
no_match: stc
exit :pop ds
ret
b_search endp
code ends
end
作者: znxllyuan 发布时间: 2010-12-07
题目的意思, 是不是在一个数组里查找某个数据,并指出其所在位置?
作者: masmaster 发布时间: 2010-12-07
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28