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

[复制链接]
6811|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的堆栈也能用啊.呵呵.

虚拟堆栈吧
 楼主| chen3bing 发表于 2009-11-24 12:37 | 显示全部楼层
谢谢各位。
听人说,PIC16单片机是硬件堆栈(8级),可是PIC16单片机汇编编程时
用到保存W寄存器和状态寄存器,那是不是说PIC单片机
既有硬件堆栈又有软件堆栈呢?
yewuyi 发表于 2009-11-24 12:59 | 显示全部楼层
呵呵,保存W等为虚拟堆栈。
arm_fan168 发表于 2009-11-24 13:20 | 显示全部楼层
单片机在执行调用子程序的指令时,一般会把返回地址自动存入堆栈,而没有被单片机自动入栈但是也需要保存的内容比如状态寄存器、通用寄存器等,就得通过PUSH等指令把它们人为地保存到堆栈中。自动入栈和“人为入栈”可能使用的是一个堆栈指针。有的单片机可以分开,比如AVR,可以通过“ST -Y, R0”这样的指令把R0存入软件堆栈区(Y是由R28和R29两个寄存器的值组成的16位指针),有的单片机缺少这样的指令,就会把软件堆栈和硬件堆栈放在一个栈空间,都使用SP,比如51.
 楼主| chen3bing 发表于 2009-11-24 15:18 | 显示全部楼层
再次谢谢各位!
现在我明白,单片机把返回地址自动推入堆栈,有些状态寄存器需要手动入栈。
那么三楼说:个人看法:硬件堆栈用来保存调用子程序的返回地址,软件堆栈用来保存局部变量和工作寄存器。
这个说法,我有点拿不准,谁能确认一下,是不是这样?
我感觉这个是区分软件堆栈和硬件堆栈的关键。
2楼说:看其栈顶指针是否和CPU具有特殊的关联,有关联者(如SP)“硬”,而无关联者“软”。
这个说法理解起来有点困难。怎么算和CPU有关联?
还有,虚拟堆栈是不是应该算软件堆栈?
我脑子不太**,还请大侠多多指教。
yewuyi 发表于 2009-11-24 15:52 | 显示全部楼层
所有的解释都饶不开2楼HWM老师的解法,呵呵,最完整的答案其实在2楼的的时候,HWM就给出了。。。


其它的就看你如何理解它。
arm_fan168 发表于 2009-11-24 15:57 | 显示全部楼层
在概念上用功意思不大,知道它是怎么工作的就行了。
 楼主| chen3bing 发表于 2009-11-24 18:25 | 显示全部楼层
好吧,我再想想。
雨落zyj 发表于 2014-3-4 00:12 | 显示全部楼层
学习了
幻梦kfc 发表于 2015-1-21 15:02 | 显示全部楼层
看看学习下,软件堆栈是模仿的一个硬件堆栈的过程。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

439

主题

2540

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部