標(biāo)題: 求大佬們的幫助,關(guān)于單片機匯編查詢關(guān)鍵字的一個程序 [打印本頁]

作者: 小多啦    時間: 2020-6-23 00:15
標(biāo)題: 求大佬們的幫助,關(guān)于單片機匯編查詢關(guān)鍵字的一個程序
大佬們啊,這題目是從50個字節(jié)的無序表中查找一個關(guān)鍵字“××H”。若找到,將關(guān)鍵字所在地址存入R2R3;若找不到,將0000H存入R2R3,我寫的程序是這樣的,為什么運行結(jié)果就是不對呢?
       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循環(huán)有問題,執(zhí)行MOVC A, @A+DPTR時的A應(yīng)該清0,MOV A, #22這一句用處不大,而且進行了保護,實際上每次執(zhí)行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
謝謝各位大佬指點,我已經(jīng)找出問題了,問題出在了修正值那里,A的修正值應(yīng)該為0,因為是用的@A+DPTR,移動指針是DPTR,然后還有一個地方就是在第一個loop最后加一個SJMP $來終止循環(huán);然后那個壓棧和入棧可以刪掉也可以留著,因為那個本來是用來給修正值用的
作者: WEI12    時間: 2020-6-28 00:20
小多啦 發(fā)表于 2020-6-23 20:34
謝謝各位大佬指點,我已經(jīng)找出問題了,問題出在了修正值那里,A的修正值應(yīng)該為0,因為是用的@A+DPTR,移動 ...

敢問是HFUT的嗎




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1