搜索
bottom↓
回复: 39

为何C语言(函数调用)需要堆栈,而汇编语言却不需要堆栈?

[复制链接]

出0入0汤圆

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

出0入58汤圆

发表于 2017-10-19 21:44:25 来自手机 | 显示全部楼层
字体太大了,还花花绿绿的

出0入0汤圆

发表于 2017-10-19 21:51:02 来自手机 | 显示全部楼层
请学习版规24,慢走,不送。

出0入0汤圆

发表于 2017-10-19 22:03:47 | 显示全部楼层
谁说汇编不要栈??
中断要,临时变量太多的函数也需要。

出0入0汤圆

发表于 2017-10-19 23:51:33 | 显示全部楼层
当年学习51就是汇编开始,入栈出栈都是自己用汇编写的。

出0入0汤圆

发表于 2017-10-19 23:59:58 | 显示全部楼层
保存现场,c 汇编都要用栈
传递参数,c 汇编,参数过多,在通用寄存器不够用的时候,也要用栈

不对的请大家更正




出0入8汤圆

发表于 2017-10-20 00:15:56 来自手机 | 显示全部楼层
标题不符合版规,乱用大字体。请参见版规,不思悔改者,楼主走好。

出10入46汤圆

发表于 2017-10-20 08:41:40 | 显示全部楼层
1. 汇编,中断不需要堆栈?
2. 自己的代码,靠汇编自己管控,可以不用堆栈指令。 当然,你可以使用。
3. C的函数,内部变量等,C编译成ASM后,需要进行合理的优化。 堆栈是一种合理高效的空间效率优化方式。 如有能力,你也可以自己写编译器,不用堆栈啊。

出0入0汤圆

发表于 2017-10-20 08:43:11 | 显示全部楼层
栈专门有个寄存器,是硬件层面的事,汇编也离不开

出0入0汤圆

发表于 2017-10-20 08:47:25 | 显示全部楼层
那PUSH和POP是干啥用的?

楼主新人,发帖子不用能大字体,小心ID不保

出350入8汤圆

发表于 2017-10-20 09:10:35 | 显示全部楼层
我是来确定楼主的ID还在吗?

出0入0汤圆

发表于 2017-10-20 09:28:02 | 显示全部楼层
我也来看看人在不在

出0入0汤圆

发表于 2017-10-20 09:36:30 | 显示全部楼层
骚年,告诉大家你用的神马单片机,既然都懂汇编了,大声告诉大家你用的单片机进中断不硬件压栈PC怎么返回的。如果压栈了需要地方存PC么。

出0入0汤圆

发表于 2017-10-20 10:24:47 | 显示全部楼层
提醒下LZ,更改标题,小心ID不保。

出0入0汤圆

发表于 2017-10-20 11:06:55 | 显示全部楼层
PIC有硬件堆栈。

出0入8汤圆

发表于 2017-10-20 11:16:00 | 显示全部楼层
本帖最后由 security 于 2017-10-20 11:17 编辑

赶紧改下标题和字体,去认真看看版规。

至于这个问题,汇编和 C 都需要栈的,栈跟用汇编还是用 C 没有关系。

出0入0汤圆

发表于 2017-10-20 11:40:11 | 显示全部楼层
说汇编不用堆栈的其实是自己不会用堆栈的吧

出0入0汤圆

发表于 2017-10-20 13:37:34 来自手机 | 显示全部楼层
shiva_shiva 发表于 2017-10-20 08:43
栈专门有个寄存器,是硬件层面的事,汇编也离不开

不一定哦,arm也可以不用r13做堆栈,你可以写个编译器用r0做堆栈。

出0入0汤圆

发表于 2017-10-20 13:42:02 来自手机 | 显示全部楼层
汇编是自己管理堆栈,c是编译器管理堆栈。堆栈其实就是一个指针,进进函数时调整一下指针,然后空出的这段内存就归这个函数用了,函数退出时把指针调回来。所有的函数都按照这个规则,方便内存管理。

出10入18汤圆

发表于 2017-10-20 14:49:56 | 显示全部楼层
请问您哪只眼睛看到的汇编不需要堆栈啊 ,知道POP、PUSH指令吗,跟我读 P-O-P  POP  PUSH P-U-S-H

出0入0汤圆

发表于 2017-10-20 15:00:22 | 显示全部楼层
vuo50z 发表于 2017-10-20 13:37
不一定哦,arm也可以不用r13做堆栈,你可以写个编译器用r0做堆栈。

印象中,m系列的arm都是一条指令压栈好几个数据,难道不是硬件的?

出0入0汤圆

发表于 2017-10-20 16:01:36 | 显示全部楼层
vuo50z 发表于 2017-10-20 13:37
不一定哦,arm也可以不用r13做堆栈,你可以写个编译器用r0做堆栈。

中断必须会将PC硬件压栈,硬件压栈的SP不是编译器,是硬件固定了的。  你另搞个SP指针,只是另起炉灶开个软栈,原来的灶并没熄火,各做各的饭。。。  大体相当于不用硬件IIC模块,软件去模拟,芯片面积并没因为不用IIC而减少。

出0入0汤圆

发表于 2017-10-20 16:09:34 | 显示全部楼层
汇编语言自己管理堆栈
头像被屏蔽

出0入0汤圆

发表于 2017-10-20 16:11:50 来自手机 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2017-10-20 16:19:30 来自手机 | 显示全部楼层
huangqi412 发表于 2017-10-20 16:01
中断必须会将PC硬件压栈,硬件压栈的SP不是编译器,是硬件固定了的。  你另搞个SP指针,只是另起炉灶开个 ...

arm的arm模式

出0入0汤圆

发表于 2017-10-20 16:24:43 来自手机 | 显示全部楼层
shiva_shiva 发表于 2017-10-20 15:00
印象中,m系列的arm都是一条指令压栈好几个数据,难道不是硬件的?

照这么说所有的指令都是硬件实现的。

出0入0汤圆

发表于 2017-10-20 16:29:42 来自手机 | 显示全部楼层
额push pop 用起来可蛋疼了

出0入0汤圆

发表于 2017-10-20 17:03:23 来自手机 | 显示全部楼层
目测楼主一天内不会上线

出0入0汤圆

发表于 2017-10-20 21:01:09 来自手机 | 显示全部楼层
这也算技术问题?还有半小时........

出0入4汤圆

发表于 2017-10-20 21:30:25 | 显示全部楼层
谁告诉你汇编语言不需要堆栈的?

出0入0汤圆

 楼主| 发表于 2017-10-20 23:06:40 | 显示全部楼层
armok 发表于 2017-10-20 16:11
“插播一则技术问题,期待大神帮忙解答(Thanks) 只看楼主 ”不是合格的标题。

违反版规11。请立即阅读 ...

不好意思  今天加班  没看到,贴子已经不可以编辑了,还有什么办法可以挽救吗??
头像被屏蔽

出0入0汤圆

发表于 2017-10-20 23:39:51 来自手机 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2017-10-20 23:52:54 | 显示全部楼层
atommann 发表于 2017-10-20 21:30
谁告诉你汇编语言不需要堆栈的?

全是全局变量就不用了

出0入0汤圆

发表于 2017-10-21 09:20:28 来自手机 | 显示全部楼层
楼主来发了一贴,讨论精彩。

出0入0汤圆

发表于 2017-10-21 09:24:48 | 显示全部楼层
楼主是伪命题

出0入8汤圆

发表于 2017-10-21 09:25:58 | 显示全部楼层
vuo50z 发表于 2017-10-20 23:52
全是全局变量就不用了

函数过程调用,不论是硬件自己压,还是我们手动压,那都是栈,总是离不开栈的。

出0入0汤圆

发表于 2017-10-21 19:12:40 来自手机 | 显示全部楼层
本帖最后由 vuo50z 于 2017-10-21 19:16 编辑
security 发表于 2017-10-21 09:25
函数过程调用,不论是硬件自己压,还是我们手动压,那都是栈,总是离不开栈的。 ...


抬杠的方法:a函数把局部变量(包括链接寄存器和其它要保存的寄存器)放在A处,b函数把局部变量放在B处……
这样的函数除了不可重入也可以工作。

出20入30汤圆

发表于 2017-10-22 14:55:37 | 显示全部楼层
汇编中的栈由人工管控。

出0入0汤圆

发表于 2017-10-22 19:36:16 | 显示全部楼层
太有趣了  这种问题牵扯一部分迷茫的人

你以为的你以为的就是你以为的

回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-5 08:08

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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