OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2649|回复: 3

插播一则不知道对不对的问题,期待大神帮忙解答(Thanks)

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2017-10-19
在线时间
1 小时
发表于 2017-10-19 22:14:21 | 显示全部楼层 |阅读模式
在嵌入式处理器环境中,为何C语言(函数调用)需要堆栈,而汇编语言却不需要堆栈?
据我所知,c语言最终也是被编译成了汇编,都是汇编,为何c语言生出来的就需要堆栈才能运行呢??

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

119

主题

439

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1185
金钱
1185
注册时间
2015-9-18
在线时间
422 小时
发表于 2017-10-19 22:29:06 | 显示全部楼层
首先,你的前提就不成立,为什么汇编不需要使用堆栈?你如何得出这个结论的?

其次,不管是C文件,还是汇编文件,最终都需要转换为可执行的二进制文件。所以,如果站在硬件底层来看,两者无根本区别。
电子爱好者
回复 支持 反对

使用道具 举报

33

主题

982

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
7864
金钱
7864
注册时间
2014-8-13
在线时间
1584 小时
发表于 2017-10-20 04:27:02 | 显示全部楼层
再补充一点吧

所谓堆栈就是内存,使用堆栈就是使用内存的一种方法(使用堆栈是众多使用内存方法中的一种)。

这种方法比较特殊,比较高级的CPU上,会有程序编译器+硬件辅助你管理这个“内存使用”,比如X86上的堆栈就有专门的寄存器+程序编译来辅助维护堆栈(xBP, xSP ,etc,在众多开发的程序中,并不是要编程人员去管理维护堆栈,而是编译器根据程序编译出适合的机器语言,其中嵌合或者说使用了堆栈管理),还有一些CPU或者MCU是仅仅由软件来维护这个堆栈的(比如51系列寄存器和外设什么的就比较简陋,要想实现堆栈,基本靠软件编程了)。


而堆栈的使用,跟编程语言关系不大,基本任何语言都能实现。


回复 支持 反对

使用道具 举报

58

主题

6292

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11410
金钱
11410
注册时间
2014-4-1
在线时间
1283 小时
发表于 2017-10-20 08:34:37 | 显示全部楼层

汇编肯定需要堆栈,
调用函数时,就是用堆栈保护现场的数据。

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-27 01:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表