| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1375 人关注过本帖
标题:汇编语言的问题(温柔小刀的问题)
只看楼主 加入收藏
nuww7
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2008-8-22
收藏
 问题点数:0 回复次数:3 
汇编语言的问题(温柔小刀的问题)
实现两个字符串的比较
子程序描述:
;子程序STRCMP
;功能:比较两个字符串
;入口参数:DS:SI=字符串1的首地址  
           ES:DI=字符串2的首地址
;出口参数:AX=0,表示两个字符串相同
;说明:设字符串均以0为结束标志

STRCMP  PROC
              CLD
           PUSH DI
          XOR AL,AL
           MOV  CX,0FFFFH
NEXT:SCASB
           JNZ  NEXT
         NOT  CX
           POP  DI
          REPZ  CMPSB
           MOV  AL,[SI-1]
           MOV BL,ES:[DI-1]
             XOR AH,AH
              MOV  BH,AH
             SUB AX,BX
             RET
STRCMP  ENDP
我的问题:
        XOR AL,AL
           MOV  CX,0FFFFH
NEXT:SCASB
           JNZ  NEXT
        NOT  CX
这几个语句的作用是什么?老师说第一句是先测试一个字符串长度,NOT  CX
这句是取得重复的次数,不能理解,这是怎么取得的?SCASB的作用是AL减去DI所指向的内存中存储的字符
的ASCII码,XOR AL,AL后,AL=0,字符串是以0结尾的,这样就能扫描完字符串,这是可以理解的,可是关
于字符串的长度的计数,也就是取得重复次数怎么用NOT  CX。现在假设重复了5次,CX<----CX-5,即0FFFFH
减去5,这NOT CX是取得重复次数,真不能理解。
搜索更多相关主题的帖子: 汇编语言 小刀 
2008-08-28 09:04
ONEPROBLEM
Rank: 6Rank: 6
来 自:广西 南宁
等 级:贵宾
威 望:21
帖 子:1569
专家分:349
注 册:2008-7-11
收藏
得分:0 
我刚学的,跟你探讨一下吧:
两个字符串的比较,有可能两者是不等长的,即,串1可能是10个字符;而串2是8个字符.所以,CX的值是不好设置的.
你的程序处理方法就是:
MOV  CX,0FFFFH 设置CX为最大值,执行 NOT  CX 即FFFF取反后,CX = 0
而REPZ  CMPSB 中的CMPSB指令的作用是先比较一个字符,然后将CX-1.于是,CX-1 (0-1的补码)后CX中的值变成了FFFF ,再用REPZ来判断,CX是不等于0了,于是循环继续!(其实它就是先让CX变成最大,有足够的循环次数.)
那循环的真正次数由谁来确定呢?就是REPZ  !!!尽管CX不等于0了,但当比较的两个字符不相等时,循环自然终止.
2008-08-28 11:15
srl9973
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2006-9-18
收藏
得分:0 
XOR AL,AL    ;将AL置0,找串结束标志0
           MOV  CX,0FFFFH  ;将CX置-1为求串长度准备
NEXT:   SCASB        
           JNZ  NEXT      ;找到0退出
        NOT  CX         ;求串长度
 在SCASB 前少了一语句DEC CX,这样这个循环才是取目的串的长度。

现在假设重复了5次,CX<----CX-5,即0FFFFH-5=0fffaH=1111 1111 1111 1010B    求反后就 是0000 0000 0000 0101B=5
2008-09-10 09:50
随心
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:12
帖 子:2577
专家分:250
注 册:2007-8-12
收藏
得分:0 
学习了

天之道,利而不害。圣人之道,为而不争。信言不美,美言不信。善者不辩,辩者不善。知者不博,博者不知。
2008-09-10 12:57
快速回复:汇编语言的问题(温柔小刀的问题)
数据加载中...
 
   



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

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