| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1404 人关注过本帖
标题:折半查找 JMP跳不过去
只看楼主 加入收藏
bayforever
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2007-11-3
收藏
 问题点数:0 回复次数:6 
折半查找 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
hwbnet
Rank: 1
等 级:新手上路
威 望:2
帖 子:355
专家分:0
注 册:2004-12-9
收藏
得分:0 
CMP AL,BUF[SI] 改为 CMP AL,[SI]
CMP AL,BUF[DI] 改为 CMP AL,[DI]

胡文斌 本人论坛:http://hwbnet.bbs./
2007-11-14 08:58
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
hwbnet
Rank: 1
等 级:新手上路
威 望:2
帖 子:355
专家分:0
注 册:2004-12-9
收藏
得分:0 
继续往下看,发现这里有问题:
DONE: MOV Y,-1 ;这里给Y附值为-1
DOS: CMP Y,-1 ;然后和-1比较,肯定相等,肯定转移。
JZ NEXT5 ;相等转移

胡文斌 本人论坛:http://hwbnet.bbs./
2007-11-14 17:22
zhulei1978
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:53
帖 子:1351
专家分:1200
注 册:2006-12-17
收藏
得分:0 

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,[SI]
JL DONE ;小于

CMP AL,[DI]
JG DONE ;大于

NEXT : mov bl,0
add bl,bl
RCR CX,1 ;偶数
JNC NEXT1
inc cx


NEXT1: dec cx
mov bx,cx
MOV BL,[SI+BX] ;BL:存放BUF存储区中的中间元素;
CMP AL,BL
JZ NEXT2 ;相等
JG NEXT3 ;大于
inc cx
SUB DI,CX
NEXT4: CMP SI,DI
JG DONE
push di
SUB di,SI
mov cx,di
pop di
inc cx
JMP NEXT
NEXT3: inc cx
add si,cx

JMP NEXT4
NEXT2: ADD CX,SI
inc cx
MOV Y ,CL
JMP DOS
DONE: MOV Y,-1
DOS: CMP Y,-1
JZ NEXT5 ;相等转移
mov ah,0
MOV AL,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


其实我就是改变社会风气,提高少女素质,刺激电影市道,提高年轻人内涵,玉树临风,风度翩翩的整蛊专家,我名叫古晶,英文名叫JingKoo!
2007-11-20 18:31
无理取闹
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:53
帖 子:4264
专家分:0
注 册:2006-7-26
收藏
得分:0 
用汇编实现算法真麻烦 这些还是交给高级语言做合适

win32汇编
病毒 加密
目前兴趣所在
2007-11-20 19:50
longxies
Rank: 1
等 级:新手上路
帖 子:113
专家分:0
注 册:2007-11-14
收藏
得分:0 
你编写的程序我怎么看着好多错误啊?下面是我编的你看看,是你要得功能吗?
DATAS SEGMENT
buf db 1,2,4,5,6,7,8,3
x DB 3
y DW ?
sstr db 'no find','$'
SSTZ DB 'YOU FIND NUMBER AT: ','$'
DATAS ENDS
STACK SEGMENT PARA STACK 'STACK'
SPAN DB 100 DUP(?)
TOP DB ?
STACK ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACK
START:
MOV AX,DATAS
MOV DS,AX
MOV AX,STACK
MOV SS,AX
MOV SP,OFFSET TOP
LEA BX,BUF
MOV AL,X
MOV CX,X-BUF
LOP1:CMP AL,[BX]
JZ ZD
INC BX
LOOP LOP1
MOV DX,OFFSET SSTR
MOV AH,09H
INT 21H
JMP NEXT
ZD: MOV AX,BX
MOV Y,AX
PUSH DX
PUSH AX
MOV DX,OFFSET SSTZ
MOV AH,09H
INT 21H
POP AX
POP DX
MOV BX,OFFSET BUF
SUB AX,BX
MOV DX,AX
AND DL,0FH
ADD DL,31H
MOV AH,02H
INT 21H
NEXT: MOV AH,4CH
INT 21H
CODES ENDS
END START
2007-11-21 00:18
快速回复:折半查找 JMP跳不过去
数据加载中...
 
   



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

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