打印

软件堆栈和硬件堆栈的问题

[复制链接]
6252|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chen3bing|  楼主 | 2009-11-24 10:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
HWM| | 2009-11-24 10:45 | 只看该作者
看其栈顶指针是否和CPU具有特殊的关联,有关联者(如SP)“硬”,而无关联者“软”。

使用特权

评论回复
板凳
desert_hawk| | 2009-11-24 10:49 | 只看该作者
个人看法:硬件堆栈用来保存调用子程序的返回地址,软件堆栈用来保存局部变量和工作寄存器。

使用特权

评论回复
地板
icecut| | 2009-11-24 10:50 | 只看该作者
软件没有sp的堆栈也能用啊.呵呵.

虚拟堆栈吧

使用特权

评论回复
5
chen3bing|  楼主 | 2009-11-24 12:37 | 只看该作者
谢谢各位。
听人说,PIC16单片机是硬件堆栈(8级),可是PIC16单片机汇编编程时
用到保存W寄存器和状态寄存器,那是不是说PIC单片机
既有硬件堆栈又有软件堆栈呢?

使用特权

评论回复
6
yewuyi| | 2009-11-24 12:59 | 只看该作者
呵呵,保存W等为虚拟堆栈。

使用特权

评论回复
7
arm_fan168| | 2009-11-24 13:20 | 只看该作者
单片机在执行调用子程序的指令时,一般会把返回地址自动存入堆栈,而没有被单片机自动入栈但是也需要保存的内容比如状态寄存器、通用寄存器等,就得通过PUSH等指令把它们人为地保存到堆栈中。自动入栈和“人为入栈”可能使用的是一个堆栈指针。有的单片机可以分开,比如AVR,可以通过“ST -Y, R0”这样的指令把R0存入软件堆栈区(Y是由R28和R29两个寄存器的值组成的16位指针),有的单片机缺少这样的指令,就会把软件堆栈和硬件堆栈放在一个栈空间,都使用SP,比如51.

使用特权

评论回复
8
chen3bing|  楼主 | 2009-11-24 15:18 | 只看该作者
再次谢谢各位!
现在我明白,单片机把返回地址自动推入堆栈,有些状态寄存器需要手动入栈。
那么三楼说:个人看法:硬件堆栈用来保存调用子程序的返回地址,软件堆栈用来保存局部变量和工作寄存器。
这个说法,我有点拿不准,谁能确认一下,是不是这样?
我感觉这个是区分软件堆栈和硬件堆栈的关键。
2楼说:看其栈顶指针是否和CPU具有特殊的关联,有关联者(如SP)“硬”,而无关联者“软”。
这个说法理解起来有点困难。怎么算和CPU有关联?
还有,虚拟堆栈是不是应该算软件堆栈?
我脑子不太**,还请大侠多多指教。

使用特权

评论回复
9
yewuyi| | 2009-11-24 15:52 | 只看该作者
所有的解释都饶不开2楼HWM老师的解法,呵呵,最完整的答案其实在2楼的的时候,HWM就给出了。。。


其它的就看你如何理解它。

使用特权

评论回复
10
arm_fan168| | 2009-11-24 15:57 | 只看该作者
在概念上用功意思不大,知道它是怎么工作的就行了。

使用特权

评论回复
11
chen3bing|  楼主 | 2009-11-24 18:25 | 只看该作者
好吧,我再想想。

使用特权

评论回复
12
雨落zyj| | 2014-3-4 00:12 | 只看该作者
学习了

使用特权

评论回复
13
幻梦kfc| | 2015-1-21 15:02 | 只看该作者
看看学习下,软件堆栈是模仿的一个硬件堆栈的过程。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

439

主题

2540

帖子

2

粉丝