| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1410 人关注过本帖
标题:折半查找 JMP跳不过去
取消只看楼主 加入收藏
bayforever
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2007-11-3
收藏
 问题点数:0 回复次数:1 
折半查找 JMP跳不过去

DATA SEGMENT
BUF DB 1, 2, 3, 4, 5, 6, 7, 8, 9
X DB 3
MID DB ?
Y DB ? ;Y:保存查找成功时元素的偏移位置。
SSTR DB 'no find','$'
DATA ENDS
;--------------------------
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
;------------
LEA SI,BUF ;SI:保存BUF存储区中最小元素的偏移地址;

MOV CX,X-BUF ;CX:存放数组的长度;
MOV BX,CX
DEC BX
MOV DI,BX ;DI:保存BUF存储区中最大元素的偏移地址;

MOV AL,X ;AL:保存要查找的数据X:


CMP AL,BUF[SI]
JL DONE ;小于

CMP AL,BUF[DI]
JG DONE ;大于

NEXT : ROR CX,1 ;偶数
JNC NEXT1
DEC CX
SHR CX,1 ;除以2

NEXT1: XOR BL,BL
CBW
MOV BL,[BUF+SI+CX] ;BL:存放BUF存储区中的中间元素;
CMP AL,BL
JZ NEXT2 ;相等
JG NEXT3 ;大于
SUB DI,CX
NEXT4: CMP SI,DI
JG DONE
SUB DI,SI
MOV CX,DI
JMP NEXT
NEXT3: ADD SI,CX
JMP NEXT4
NEXT2: ADD CX,SI
MOV Y ,CL
JMP DOS
DONE: MOV Y,-1
DOS: CMP Y,-1
JZ NEXT5 ;相等转移
MOV DL,Y ;把Y的ASCLL码放到DX中,用除以10取余加上48得到。
MOV BL,10
DIV BL
ADD AH,48
MOV DL,AH
MOV AX,0
MOV AH,2
INT 21H
JMP NEXT6

NEXT5: MOV DX,OFFSET SSTR ;没找到情况给出提示
MOV AX,0
MOV AH,9
INT 21H
NEXT6: MOV AH,4CH
INT 21H
CODE ENDS
END START

折半查找。结果总是 no find。始终执行NEXT5 是怎么回事???如果去掉next5可以正常显示结果。
。。。。。。。。。。。。JMP



搜索更多相关主题的帖子: JMP 折半 
2007-11-13 11:56
bayforever
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2007-11-3
收藏
得分:0 
回复:(hwbnet)CMP AL,BUF[SI] 改为 CMP AL,[SI]C...
改过了,还是不行啊.我要查找的是3 结果还是no find
如果把CMP Y,-1 JZ NEXT5 去掉 在把
NEXT5: MOV DX,OFFSET SSTR ;没找到情况给出提示
MOV AX,0
MOV AH,9
INT 21H
去掉就可以找到......
就是总是执行 NEST5:怎么办啊??

因为要在没找到情况下给出提示 y=-1显示不出,所以才想cmp y,-1 要是等的话就 显示 no find,还有什么方法吗?

[此贴子已经被作者于2007-11-14 12:49:23编辑过]

2007-11-14 12:46
快速回复:折半查找 JMP跳不过去
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016456 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved