返回主程序指令是什么~~单片机

返回主程序指令是什么~~单片机,第1张

我仔细看了一下所有人的回答,有根本没看懂楼主问题答非所问的,也有回答的差不离的,我来切一下重点好了。

楼主这所有问题其实归根结底就是一个问题,堆栈和SP(堆栈指针)的问题

CALL指令执行时,就是先把当前程序指针压入堆栈并使SP加1,然后开始执行CALL指令调用的子程序,当遇到RET指令时,把前面压入堆栈的程序指针取出并SP减1(出栈),然后就回到CALL程序调用前位置了。

JMP指令并不会把程序指针压入堆栈更不会影响SP(当然自己在JMP后用PUSH指令除外)。自然CALL调用后使用JMP指令跳转,最后遇到RET指令一样能回到CALL程序调用前位置。就算你在JMP指令后使用PUSH指令,只要和POP成对出现,还是会回到调用前的位置,不成对?这堆栈不能这么用的。。飞了。。飞了。

中断其实和CALL指令时一样的道理,至于用RETI就如张庚(3楼)兄弟说的中断是要多处理一些标志位。

至于调用CALL多少次出错,这还是堆栈和SP的问题。

如我上面所写,CALL指令一次就得压栈一次,而你在RET指令前又来一次CALL指令,那么还得压一次,这样一直下去堆栈指针愈来愈大,就会占用程序所要使用的RAM地址,自然肯定会出错,一半51单片机默认SP为07H,而一般编程RAM地址20H开始就会被程序占用,一算就知道了,大概10几20次吧,如果你中间还是用堆栈那么就少点,如果你的程序占用RAM的地址靠后那么就多点,不过一般够用是肯定的了

RET是普通子程序的返回指令,而不能用RETI,所以,RET不是中断返回指令,就是子程序返回指令。

而RETI是用在中断子程序的返回指令,必须用这个,这才叫中为返回指令,而不能用RET,这就是区别。

RET指令是子程序的最后一条指令,即恢复断点,返回主程序。

没有要求RET指令非要和哪一条指令要配对使用。

无论用户是否调用子程序 即是否使用CALL指令 只要子程序存在 RET指令就存在

跟CALL指令没司马关系。

呵呵 满意就选满意回答吧

以上就是关于返回主程序指令是什么~~单片机全部的内容,包括:返回主程序指令是什么~~单片机、单片机汇编语言指令中中断返回指令RET和RETI有什么不同、51单片机的汇编程序中,RET指令必须和哪个指令配对使用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9878810.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存