找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1872|回复: 6
打印 上一主题 下一主题
收起左侧

求大佬们的帮助,关于单片机汇编查询关键字的一个程序

[复制链接]
跳转到指定楼层
楼主
ID:787235 发表于 2020-6-23 00:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大佬们啊,这题目是从50个字节的无序表中查找一个关键字“××H”。若找到,将关键字所在地址存入R2R3;若找不到,将0000H存入R2R3,我写的程序是这样的,为什么运行结果就是不对呢?
       ORG 0000H
       LJMP MAIN
       ORG 0100H
MAIN:  MOV 30H,#00H
       MOV R1,#16
       MOV A, #22
       MOV DPTR, #TAB4
LOOP:  PUSH ACC
       MOVC A, @A+DPTR
       CJNE A, 30H, LOOP1
       MOV R2, DPH
       MOV R3, DPL
DONE:  RET
LOOP1: POP ACC
       INC DPTR
       DJNZ R1, LOOP
       MOV R2, #00H
       MOV R3, #00H
       AJMP DONE
TAB4: DB 01H, 03H, 05H, 10H, 11H, 18H, 09H, 17H, 10H, 20H, 21H, 25H, 32H, 31H, 37H, 43H

      END

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:401564 发表于 2020-6-23 08:18 | 只看该作者
1:PUSH ACC和POP ACC指令尽量不要用,在这压入,在那弹出,进进出出的,你也不知道他弹出的是哪个值
2:没有CALL指令,尽量不要用RET指令,你也不知道它会返回到哪里
3:汇编是个麻烦的东西,可以的话,尽量加注释,也好找出问题出在哪里
回复

使用道具 举报

板凳
ID:235200 发表于 2020-6-23 09:01 | 只看该作者
LOOP循环有问题,执行MOVC A, @A+DPTR时的A应该清0,MOV A, #22这一句用处不大,而且进行了保护,实际上每次执行MOVC A, @A+DPTR时的A是22,好象不符合题意,把22改成0试试
回复

使用道具 举报

地板
ID:787340 发表于 2020-6-23 09:24 | 只看该作者
有BUG   慢慢找出错误来
回复

使用道具 举报

5#
ID:267719 发表于 2020-6-23 09:27 | 只看该作者
MOV A, #22改为MOV A, #0
回复

使用道具 举报

6#
ID:787235 发表于 2020-6-23 20:34 | 只看该作者
谢谢各位大佬指点,我已经找出问题了,问题出在了修正值那里,A的修正值应该为0,因为是用的@A+DPTR,移动指针是DPTR,然后还有一个地方就是在第一个loop最后加一个SJMP $来终止循环;然后那个压栈和入栈可以删掉也可以留着,因为那个本来是用来给修正值用的
回复

使用道具 举报

7#
ID:707687 发表于 2020-6-28 00:20 | 只看该作者
小多啦 发表于 2020-6-23 20:34
谢谢各位大佬指点,我已经找出问题了,问题出在了修正值那里,A的修正值应该为0,因为是用的@A+DPTR,移动 ...

敢问是HFUT的吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表