字符串的比较

lxqfeng 2009-04-14 09:22:47
试编写一程序,要求比较两个字符串STRING1和STRING2所含字符是否相同,若相同显示‘MATCH'不相同显示’NO MATCH'.
stack segment stack
db 200 dup (0)
stack ends
data segment
str1 db 'abc'
str2 db 'abD'
yes db 'match',0dh,0ah,'$'
no db 'no match',0dh,0ah,'$'
data ends
code segment
assume cs:code,ds:data,ss:stack
begin:push ds
sub ax,ax
push ax
mov ax,data
mov ds ,ax
lea si ,str1
lea di ,str2
mov cx,str2-str1
repe cmpsb
jne sno
mov ah,09h
lea dx,yes
int 21h
ret
sno:mov ah,09h
lea dx,no
int 21h
ret
code ends
end begin

程序运行的时候有问题,有的时候是将结果多次循环输出,并且如果改两个字符串的时候输出结果始终是NO MATCH ..
麻烦在此基础上面改动下 谢谢了!!!
...全文
337 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
BAYNPU 2009-04-15
  • 打赏
  • 举报
回复
子程序利用过程(Procedure)伪指令定义,每个子程序是具有一个唯一的子程序名的程序段。过程的定义由一对过程伪指令PROC和ENDP来完成。
过程的调用与返回是由指令(CALL)和RET来完成的。
lxqfeng 2009-04-15
  • 打赏
  • 举报
回复
大侠,不好意思。我实在是不知道为什么在源程序里面加上了 main pro far 和main endp。 这只是对过程的定义,可加上以后这个程序运行就正常了。麻烦你讲解下,谢谢了。
zhouxingyu896 2009-04-15
  • 打赏
  • 举报
回复
学习
friendly_ 2009-04-15
  • 打赏
  • 举报
回复

stack segment stack
db 200 dup (0)
stack ends
data segment
str1 db 'abc'
str2 db 'abD'
yes db 'match',0dh,0ah,'$'
no db 'no match',0dh,0ah,'$'
data ends
code segment
assume cs:code,ds:data,ss:stack
begin:push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
mov es,ax
lea si ,str1
lea di ,str2
mov cx,str2-str1
rep cmpsb
jne sno
mov ah,09h
lea dx,yes
int 21h
jmp exit
sno:mov ah,09h
lea dx,no
int 21h
pop ds

exit:pop ax
pop ds
mov ax,4c00h
int 21h
code ends
end begin

BAYNPU 2009-04-15
  • 打赏
  • 举报
回复
编译器MASM5.0:
data segment
str1 db 'abc'
str2 db 'abd'
yes db 'match',0dh,0ah,'$'
no db 'no match',0dh,0ah,'$'
data ends
code segment
main proc far
assume cs:code,ds:data
begin:push ds
sub ax,ax
push ax
mov ax,data
mov ds ,ax
mov es,ax
lea si ,str1
lea di ,str2
mov cx,str2-str1
repe cmpsb
jne sno ;je
mov ah,09h
lea dx,yes
int 21h
ret
sno:mov ah,09h
lea dx,no
int 21h
ret
main endp
code ends
end begin
lxqfeng 2009-04-15
  • 打赏
  • 举报
回复
大侠,我把你改的东西运行了一下,可惜还是有问题的。输出结果为match 与实际结果不同的 另外结果还是无限循环。。麻烦帮忙多看看 谢谢了的
BAYNPU 2009-04-15
  • 打赏
  • 举报
回复
mov es,ax 把AX中的内容放到ES中,是为什么?;ds:[si]-es:[di],si<-si+_1,di<-di+_1.
另外,repe cmpsb je sno jne 是对串进行比较 ,串不相等就退出,另外比较完了也退出。
repe cmpsb je sno/repe cmpsb jne sno;相等退出/不相干等也退出程序,可是显示在屏幕的字符是不一样:第一个显示'MATCH',第二个显示'NO MATCH'
lxqfeng 2009-04-14
  • 打赏
  • 举报
回复
大侠,mov es,ax 把AX中的内容放到ES中,是为什么? 另外,repe cmpsb je sno jne 是对串进行比较 ,串不相等就退出,另外比较完了也退出。是这么对其进行判别的? 麻烦详解一下 , 谢谢了!!!!
BAYNPU 2009-04-14
  • 打赏
  • 举报
回复
stack segment stack
db 200 dup (0)
stack ends
data segment
str1 db 'abc'
str2 db 'abD'
yes db 'match',0dh,0ah,'$'
no db 'no match',0dh,0ah,'$'
data ends
code segment
assume cs:code,ds:data,ss:stack
begin:push ds
sub ax,ax
push ax
mov ax,data
mov ds ,ax
mov es,ax
lea si ,str1
lea di ,str2
mov cx,str2-str1
repe cmpsb
je sno ;jne
mov ah,09h
lea dx,yes
int 21h
ret
sno:mov ah,09h
lea dx,no
int 21h
ret
code ends
end begin

21,500

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧