标题: 求大佬们的帮助,关于单片机汇编查询关键字的一个程序 [打印本页]

作者: 小多啦    时间: 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


作者: Y_G_G    时间: 2020-6-23 08:18
1:PUSH ACC和POP ACC指令尽量不要用,在这压入,在那弹出,进进出出的,你也不知道他弹出的是哪个值
2:没有CALL指令,尽量不要用RET指令,你也不知道它会返回到哪里
3:汇编是个麻烦的东西,可以的话,尽量加注释,也好找出问题出在哪里
作者: csmyldl    时间: 2020-6-23 09:01
LOOP循环有问题,执行MOVC A, @A+DPTR时的A应该清0,MOV A, #22这一句用处不大,而且进行了保护,实际上每次执行MOVC A, @A+DPTR时的A是22,好象不符合题意,把22改成0试试
作者: suve    时间: 2020-6-23 09:24
有BUG   慢慢找出错误来
作者: carpcarey    时间: 2020-6-23 09:27
MOV A, #22改为MOV A, #0
作者: 小多啦    时间: 2020-6-23 20:34
谢谢各位大佬指点,我已经找出问题了,问题出在了修正值那里,A的修正值应该为0,因为是用的@A+DPTR,移动指针是DPTR,然后还有一个地方就是在第一个loop最后加一个SJMP $来终止循环;然后那个压栈和入栈可以删掉也可以留着,因为那个本来是用来给修正值用的
作者: WEI12    时间: 2020-6-28 00:20
小多啦 发表于 2020-6-23 20:34
谢谢各位大佬指点,我已经找出问题了,问题出在了修正值那里,A的修正值应该为0,因为是用的@A+DPTR,移动 ...

敢问是HFUT的吗




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