+ -
当前位置:首页 → 问答吧 →  帮忙写个注释,折半查表

帮忙写个注释,折半查表

时间: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

作者: znxllyuan   发布时间: 2010-12-07

题目的意思, 是不是在一个数组里查找某个数据,并指出其所在位置?

作者: masmaster   发布时间: 2010-12-07