单片机堆栈出栈问题

来源:百度知道 编辑:UC知道 时间:2024/05/29 02:34:30
书中解释是为了保护现场。但我觉得就是为了保存某些参数而已。其实可以不用栈来做,直接用R0~R7或者其它储存单元来保存就可以。不知道这样理解对不对。

你的理解是正确的,以51为例:需要保存的参数累加器A和状态字PSW,在程序产生中断的时候,堆栈的做法是:
MOV SP,#60H
PUSH ACC
PUSH PSW
.......
...
POP PSW
POP ACC
这种做法很方便

最好还是不要用工作寄存器做,原因:R0~R7在程序中有他自己的用处,重复使用会丢失数据,如果说51有4组工作寄存器可用,那么就要面临选体的问题,这样就会很麻烦。
事实上,堆栈的设计是单片机硬件设计的一个理念,那就是尽可能的把数据按类别分开处理,就是让堆栈里的数据区别于RAM里的数据,说到底,工作寄存器也是存储数据的,本质上是一样的,但在设计单片机的时候尽可能地分开,这样可以使得单片机的功能更加强大,执行效率更高
51单片机的工作寄存器是在人啊摹RAM中统一编址的,那么还有的单片机的工作寄存器是独立出来的,也就是为了达到这个目的!

总之,既然有了 堆栈操作这匹“好马”,就没必要用别的 “破鞍”了!!

1. 想法是可以的。堆栈就是一块儿内存嘛。
2. 不过用 R0~R7肯定是不行的,因为只要程序在运行,时时刻刻都用那些公共的寄存器。
3. 其它储存单元是可以考虑的,不过需要保证那快儿 存储单元不被别的占用
4. 得通过汇编 完成

你理解的不错,除非你对程序很有把握,否则最好别这么做

啊哦。。。如果2级嵌套呢,3级,4级嵌套调用呢?通用寄存器很贵,数量不多,一个MCU通常就几个通用寄存器,能保存几个参数?但是内存就很多很多啦。。懂了哇。。

不对。