免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123
最近访问板块 发新帖
楼主: feelsmile
打印 上一主题 下一主题

那位大牛能详细解释下硬件堆栈和软件堆栈? [复制链接]

论坛徽章:
0
21 [报告]
发表于 2007-10-30 21:32 |只看该作者
我对硬件栈理解也是比较模糊的,我是这样认为的,有不同意的一起讨论吧!
我认为硬件有两层结构:
1.第一层是功能支持硬件,ALU,Register,memory,PC这些东西,他们的引脚构成了最原始的指令,换句话说比如一个32位原始指令,连接到32个这样的引脚上,实现一定的功能,比如ALU的加法操作,取memory数据,指令,保存ALU结果到Register,memory等,我把这些叫原始opcode,注意这些指令不是我们常说的硬件指令集.
2.第二层是软件功能硬件(也就是硬件实现软件功能,既硬件栈),为什么实现这一层,我觉的从两个层次说下,一是实现方式,一是目的.
实现方式:把几条上一层原始opcode封装成一条这一层opcode(我认为这一层提供的opcode才是我们平常说的硬件指令集).比如一条PUSH或POP指令,可以分解为以下几条第一层原始opcode指令:
PUSH一个memory操作数到堆栈1)in 源mem地址 , (2)out 目的mem地址(既栈顶,这是基于内存栈的,如果是寄存器栈则out到寄存器中) , (3)修改栈指针
再比如一条Call指令,分解为下面几条原始opcode
(1)push return_address(这的push指令是刚才实现的那个,为了清楚而已,其实是实现push的那几条原始opcode)
(2)保存调用者的现场(具体看怎摸实现了,可以保存在return_address后面的栈里,也可以保存在其他地方)
(3)jmp start_address
(4)(return_address)这不是opcode,只是说明一下这是函数调用的返回地址,第一条push指令将他保存在堆栈中,函数体里的ret在原始opcode实现中会jmp回来
目的:实现硬件栈的目标,我觉的是:
(1):函数调用中用栈结构是最好的选择,所以用硬件实现,提高效率
(2):原始opcode太过于复杂,基于硬件栈封装了一层的opcode更容易理解一点吧,这才是我们平常所说的硬件指令集
(3):原始opcode反映出了硬件结构,也许有保护结构的需要吧
再说下硬件栈的结构吧,如果是基于内存栈的,那我们平常见到的80x86中的SS,ESP寄存器应该就在这第层硬件结构中,硬件栈PUSH指令应该带有两个参数,分别保存到SS,ESP用于实现这种栈操作,而我们所说的软件栈,无论是实模式还是保护模式最终都是调用的这个PUSH指令.

最后,堆栈是种数据结构,那他必然是基于代码了,无论是硬件实现还是软件实现,最终他都要归为软件一类,所以硬件栈只是其他功能硬件的补充,并不能归为硬件结构一类.

这只是我的理解,不一定对,有不同的理解写出来,大家再讨论.

[ 本帖最后由 sgrwf 于 2007-10-30 21:37 编辑 ]

论坛徽章:
0
22 [报告]
发表于 2007-10-31 00:03 |只看该作者
受教了

论坛徽章:
0
23 [报告]
发表于 2014-06-03 15:38 |只看该作者
本帖最后由 houge101 于 2014-06-03 15:39 编辑

你好,你说ucos在SPARC上能跑,您能给个ucos在SPARC上运行的代码吗?我的邮箱287714316@qq.com
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP