欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

单片机汇编请问

更新时间: 2014-01-05 03:17:09 责任编辑: Author_N1

 

单片机汇编请教
在RAM中21H起始的位置中存放一组长度为20H的数据,编写三个子程序,分别实现以下功能:
    1)、找出数据‘00H’的个数,存放在41H中;
    2)、找出20H个数据的最大值,存放在42H中;
3)、查找是否有‘A’,并把首个出现该数据的位置存放在43H中。




ORG 0000H
MOV R0,#21H    ;    第一个数的地址放R0
MOV  41H,#00H        ;存放00H个数
MOV 42H, 21H   ;  最大值放42H
MOV 43H, #00H     ;存放第一次出现A的地址

MAIN:  LCALL Search0

Search0:  MOV A,@R0
          JZ   Is00  ;A为0转移
          LCALL SearchA
Search123:  LCALL SearchMax
          CJNE R0,#41H,MAIN
          SJMP $

Is00:     INC  41H
      ;    RET ;为什么返回上一句而不是下一句?

SearchA:  CJNE @R0,#0AH,Search123
          MOV 43H,R0
          RET


SearchMax: MOV A,42H    ;取当前数
           INC R0   ;取下一个数
           SUBB A, @R0      ;    当前数减去下一个数
           JC IsMax   ;进位为1转移
           RET


IsMax:     MOV 42H, @R0
           RET

 END


单步调试时,前面循环几次是正确的,但是到后面的话,RAM中的数据自己就都变了。。。会发现先变为17再变为0E...
--参考方法--
会不会是预留的地址不够了,覆盖到了存数据的区域,所以才改变的啊
--参考方法--
看看是不是堆栈没有设置好,因为若是51汇编,栈顶的位置一般是30H,这样你操作的地方就碰到了堆栈。
要不再换一段内存操作试试。
--参考方法--
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 03:17:09
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/20376/
本文WWW.DOC100.NET DOC100.NET版权所有。