| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1212 人关注过本帖
标题:看看这个关于比较字符的程序!(汇编)
只看楼主 加入收藏
zhouyu
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2006-11-15
收藏
 问题点数:0 回复次数:8 
看看这个关于比较字符的程序!(汇编)
这是一个比较字符串的问题
我得不到正确的结果
请帮我看看,错在哪里。
谢谢!
dseg segment
string1 db 'input string1: $'
string2 db 0ah,0dh,'input string2: $'
mess1 db 'match$'
mess2 db 'no match$'
bufo1 db 80
db ?
db 81 dup (0)
dseg ends
eseg segment
bufo2 db 80
db ?
db 81 dup (0)
eseg ends
cseg segment
assume cs:cseg,ds:dseg,es:eseg
start:
mov ax,dseg
mov ds,ax
mov ax,eseg
mov es,ax
lea dx,string1
mov ah,9
int 21h
lea dx,bufo1
mov ah,10
int 21h
lea dx,string2
mov ah,9
int 21h
lea dx,bufo2
mov ah,10
int 21h
lea si,bufo1
lea di,bufo2
mov cl,[si+1]
cld
repz cmpsb
jz l1
jnz l2

l1:
lea dx,mess1
mov ah,9
int 21h
jmp exit
l2:
lea dx,mess2
mov ah,9
int 21h
exit :
mov ah,4ch
int 21h

cseg ends
end start

[此贴子已经被作者于2006-12-20 22:02:55编辑过]

搜索更多相关主题的帖子: 汇编 字符 
2006-12-20 10:50
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 
说的不太清楚,就字符串比较?

2006-12-20 17:18
lefttime
Rank: 1
等 级:新手上路
帖 子:162
专家分:0
注 册:2006-10-6
收藏
得分:0 
楼主记住了,以后程序写出来,最好把自己的思路也给出,这样我们才好跟着你的思路判断,不然,一看到一大堆的程序,没个注释之类,似乎太

我是金子,我要闪光的
2006-12-20 20:31
zhouyu
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2006-11-15
收藏
得分:0 
这是一个比较字符串的问题
dseg segment
string1 db 'input string1: $'
string2 db 0ah,0dh,'input string2: $'
mess1 db 'match$'
mess2 db 'no match$'
bufo1 db 80
db ?
db 81 dup (0)
dseg ends
eseg segment
bufo2 db 80
db ?
db 81 dup (0)
eseg ends
cseg segment
assume cs:cseg,ds:dseg,es:eseg
start:
mov ax,dseg
mov ds,ax
mov ax,eseg
mov es,ax
lea dx,string1
mov ah,9
int 21h ;提示输入第一个字符串
lea dx,bufo1
mov ah,10
int 21h ;从键盘输入第一个字符串
lea dx,string2
mov ah,9
int 21h ;提示输入第二个字符串
lea dx,bufo2
mov ah,10
int 21h ;从键盘输入第二个字符串
lea si,bufo1
lea di,bufo2
mov cl,[si+1] ;取字符串的长度,放在cx中
cld
repz cmpsb ;对两字符串一个一个进行比较,如果相等就继续比较,不相等就执行jnz l2指令,如比到字符串最后一个字符也相等,就执行jz l1指令
jz l1
jnz l2

l1:
lea dx,mess1
mov ah,9
int 21h ;显示两字符串相同
jmp exit
l2:
lea dx,mess2
mov ah,9
int 21h ;显示两字符串不同
exit :
mov ah,4ch
int 21h

cseg ends
end start
我主要是想从键盘输入两个字符串,然后对它们进行比较。
如果相同就输出"match",否则就输出"no match"
但我得不出正确结果!
这样清楚吗?
我想请你们我看看问题出在哪!

[此贴子已经被作者于2006-12-20 21:54:31编辑过]

2006-12-20 21:53
lefttime
Rank: 1
等 级:新手上路
帖 子:162
专家分:0
注 册:2006-10-6
收藏
得分:0 
先不管你的方法好坏,因为你这里启用了附加段,所以:
[QUOTE]
......
lea dx,bufo2
mov ah,10
int 21h
......
[/QUOTE]
上面的语句是会出错的,因为10号中断采用的是DS:DX,即使上面的程序能编译通过,那第二个字符串怎么调用,我想有些困难

我是金子,我要闪光的
2006-12-21 15:34
zhouyu
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2006-11-15
收藏
得分:0 
哦!
谢谢啊!
2006-12-22 22:00
conqueror
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-5-15
收藏
得分:0 
你可以单个比较啊,老师说字符串比较容易出错啊!!!我们刚刚编过这个程序。。
2007-05-16 18:19
conqueror
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-5-15
收藏
得分:0 

dseg segment
string1 db 'input string1: $'
string2 db 0ah,0dh,'input string2: $'
mess1 db 0ah,0dh,'match$'
mess2 db 0ah,0dh,'no match$'
bufo1 db 80
db ?
db 81 dup (0)

bufo2 db 80
db ?
db 81 dup (0)
dseg ends
cseg segment
assume cs:cseg,ds:dseg
start:
mov ax,dseg
mov ds,ax

lea dx,string1
mov ah,9
int 21h ;提示输入第一个字符串
lea dx,bufo1
mov ah,10
int 21h ;从键盘输入第一个字符串
lea dx,string2
mov ah,9
int 21h ;提示输入第二个字符串
lea dx,bufo2
mov ah,10
int 21h ;从键盘输入第二个字符串
lea si,bufo1+2
lea di,bufo2+2
mov cx,8
compare :mov bl,[si]
mov al,[di]
cmp al,bl
jnz l2
inc si
inc di
loop compare



l1:
lea dx,mess1
mov ah,9
int 21h ;显示两字符串相同
jmp exit
l2:
lea dx,mess2
mov ah,9
int 21h ;显示两字符串不同
exit :
mov ah,4ch
int 21h

cseg ends
end start

2007-05-16 18:32
conqueror
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-5-15
收藏
得分:0 

只是做了一些小的修改啊,一般不用ES段的啊,不知道为什么。然后就是你输入字符串在调用
mov ah,0ah
int 21h
的时候注意你的定义,
bufo1 db 80
db ?
db 81 dup (0)
这样是对的,第一个缓冲区域放的是能够接受的字符数
第二个区域放的是实际字符数,就是你输入的字符数
第三个区域放的是实际的内容
所以我用了
lea si,bufo1+2 ;指向str1实际内容首地址
lea di,bufo2+2 ;指向str2实际内容首地址

mov cx,8 ;loop 默认的循环变量存放地址
compare :mov bl,[si]
mov al,[di]
cmp al,bl
jnz l2
inc si
inc di
loop compare
单个字符比较就可以了啊。不信你试一下

2007-05-16 18:41
快速回复:看看这个关于比较字符的程序!(汇编)
数据加载中...
 
   



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

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