[問題] 關於acall function時 ret的問題(8051)

看板ASM (組合語言)作者 (Harry)時間13年前 (2011/12/30 10:47), 編輯推噓1(106)
留言7則, 2人參與, 最新討論串1/1
小弟我在寫8051期末project時遇到一個問題 我在main function用acall subroutine時 回不了main function 我在main function call 我的subroutine main: acall RX_STR EXIT: ajmp EXIT RX_STR: mov R0,#0 RX_STR_LOOP: acall _RX_CHAR acall _TX_CHAR push ACC inc R0 CJNE A,#81,RX_STR_LOOP pop ACC ;ACALL _TX_CHAR mov A,#10 ACALL _TX_CHAR dec R0 ret 請問為什麼這個subroutine的ret沒work??(害我要用AJMP跳回主程式) 然而ACALL _RX_CHAR和ACALL _TX_CHAR就可以回來?? 謝謝~~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.242.8.136

12/30 18:24, , 1F
PUSH 太多次 POP只有一次?? 你的程式有個詭異的迴圈
12/30 18:24, 1F

12/30 18:25, , 2F
我不知道你A怎麼動 但是只要 CJNE A,#81,RX_STR_LOOP
12/30 18:25, 2F

12/30 18:25, , 3F
跳了 那你的堆疊就亂了 如果我沒看錯的話XD
12/30 18:25, 3F

12/30 18:25, , 4F
堆疊亂了的話 RET是根據堆疊在回的 所以也一起掰掰XD
12/30 18:25, 4F

12/30 19:22, , 5F
謝啦~~哈哈~~我以為call fuction的stack~~跟一班stack
12/30 19:22, 5F

12/30 19:22, , 6F
不一樣~~
12/30 19:22, 6F

12/30 19:22, , 7F
謝囉~~解決了~~
12/30 19:22, 7F
文章代碼(AID): #1E_IOhX1 (ASM)
文章代碼(AID): #1E_IOhX1 (ASM)