标题: 单片机字符串怎么比较,我这有个程序,看不大懂... [打印本页]

作者: UCR    时间: 2012-12-22 23:11
标题: 单片机字符串怎么比较,我这有个程序,看不大懂...
比较两个ASCII 码字符串是否相等。字符串长度在内部RAM 3FH 单元,两字符串的首地址分别为40H、50H。如果

两个字符串相等,置CY=1,否则,置CY=0。
MOV R0,#40H
MOV R1,#50H
MOV R2,#3FH
LOOP1:MOV A,@R0
CLR C
XRL A,@R1
JNZ LOOP2
INC R0
INC R1
DJNZ R2,LOOP1
SETB C
RET
LOOP2:CLR C
RET
那个字符串长度在内部RAM 3FH 单元是什么意思啊、请赐教一下啊。

作者: UCR    时间: 2012-12-22 23:47
都来看看啊
作者: ahshmj    时间: 2012-12-23 10:04
字符串可以是若干个字符。你可以取其中n个字符进行比较,当然“n”也可以是全部。“n”保存在3fh中。进行比较的两个字符串保存的位置当然都是一个连续的内存区域,其区域的第一个地址分别在“40h”、“50h”。 这样的问题很简单,大概是许多人不屑回答吧?
[此贴子已经被作者于2012-12-23 10:05:46编辑过]

作者: hodenshi    时间: 2012-12-24 11:52
 我也看不懂,好难
作者: UCR    时间: 2012-12-24 22:43
字符串里一个字符  就差不多一个字节了吧,那还怎么保存在一个单元里啊 ,你开玩笑呢啊 ?那你说要是把这两个字符串比较完要比较多少次啊 。
作者: ahshmj    时间: 2012-12-25 10:44
楼主还是先弄懂:什么是字符?什么是字节?什么是内存单元?然后再来看程序。 内存单元一般是指一个“字节”单元,不是“位”单元。
作者: hfbjjs    时间: 2018-7-12 03:37
前面开始3行,就把 40H,50H,3FH,移到 R0,R1,R2 去了!  R0,R1 作为指针使用,R2作为计数器使用.
MOV A,@R0       CLR C        XRL A,@R1  这3行是把 R0 指向的存放单元内容, 通过 XRL 异或指令,与 R1 指向单元进行运算,.
异或运算遇到2个字节的内容各位相同,就会让 A = 0!  标志位 Z =1 !
JNZ 指令就是判断 Z 标志位的, 如果Z=0,说明两数不相等, 此时, R0,R1 分别加1,各指向下一个数据,继续比较.------而R2是最大比较次数,到达次数后,无论结果如何,都就会退出程序.
如果JNZ 指令判断 Z 标志位的结果=0,说明两数相等, 程序走向 LOOP2  ,结束比较.
至于 C 标志是程序退出后,方便比较而设置的,另外,如果需要, R2 也记录了比较到多少次的数字,可以通过它查看判断到.
汇编程序其实很仔细,每一步都一清二楚,多练习熟练后就会容易看明白. ----- 仅供参考!




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1