作者chenkaihsu (Harry)
看板ASM
標題[問題] 關於acall function時 ret的問題(8051)
時間Fri Dec 30 10:47:03 2011
小弟我在寫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
1F:推 gothatet:PUSH 太多次 POP只有一次?? 你的程式有個詭異的迴圈 12/30 18:24
2F:→ gothatet:我不知道你A怎麼動 但是只要 CJNE A,#81,RX_STR_LOOP 12/30 18:25
3F:→ gothatet:跳了 那你的堆疊就亂了 如果我沒看錯的話XD 12/30 18:25
4F:→ gothatet:堆疊亂了的話 RET是根據堆疊在回的 所以也一起掰掰XD 12/30 18:25
5F:→ chenkaihsu:謝啦~~哈哈~~我以為call fuction的stack~~跟一班stack 12/30 19:22
6F:→ chenkaihsu:不一樣~~ 12/30 19:22
7F:→ chenkaihsu:謝囉~~解決了~~ 12/30 19:22