为何C语言(函数调用)需要堆栈,而汇编语言却不需要堆栈?
在嵌入式处理器环境中,为何C语言(函数调用)需要堆栈,而汇编语言却不需要堆栈?据我所知,c语言最终也是被编译成了汇编,都是汇编,为何c语言生出来的就需要堆栈才能运行呢?? 字体太大了,还花花绿绿的 请学习版规24,慢走,不送。 谁说汇编不要栈??
中断要,临时变量太多的函数也需要。 当年学习51就是汇编开始,入栈出栈都是自己用汇编写的。 保存现场,c 汇编都要用栈
传递参数,c 汇编,参数过多,在通用寄存器不够用的时候,也要用栈
不对的请大家更正
标题不符合版规,乱用大字体。请参见版规,不思悔改者,楼主走好。 1. 汇编,中断不需要堆栈?
2. 自己的代码,靠汇编自己管控,可以不用堆栈指令。 当然,你可以使用。
3. C的函数,内部变量等,C编译成ASM后,需要进行合理的优化。 堆栈是一种合理高效的空间效率优化方式。 如有能力,你也可以自己写编译器,不用堆栈啊。 栈专门有个寄存器,是硬件层面的事,汇编也离不开 那PUSH和POP是干啥用的?
楼主新人,发帖子不用能大字体,小心ID不保 我是来确定楼主的ID还在吗? 我也来看看人在不在 骚年,告诉大家你用的神马单片机,既然都懂汇编了,大声告诉大家你用的单片机进中断不硬件压栈PC怎么返回的。如果压栈了需要地方存PC么。 提醒下LZ,更改标题,小心ID不保。 PIC有硬件堆栈。 本帖最后由 security 于 2017-10-20 11:17 编辑
赶紧改下标题和字体,去认真看看版规。
至于这个问题,汇编和 C 都需要栈的,栈跟用汇编还是用 C 没有关系。 说汇编不用堆栈的其实是自己不会用堆栈的吧{:lol:} shiva_shiva 发表于 2017-10-20 08:43
栈专门有个寄存器,是硬件层面的事,汇编也离不开
不一定哦,arm也可以不用r13做堆栈,你可以写个编译器用r0做堆栈。 汇编是自己管理堆栈,c是编译器管理堆栈。堆栈其实就是一个指针,进进函数时调整一下指针,然后空出的这段内存就归这个函数用了,函数退出时把指针调回来。所有的函数都按照这个规则,方便内存管理。 请问您哪只眼睛看到的汇编不需要堆栈啊 ,知道POP、PUSH指令吗,跟我读 P-O-PPOPPUSH P-U-S-H vuo50z 发表于 2017-10-20 13:37
不一定哦,arm也可以不用r13做堆栈,你可以写个编译器用r0做堆栈。
印象中,m系列的arm都是一条指令压栈好几个数据,难道不是硬件的? vuo50z 发表于 2017-10-20 13:37
不一定哦,arm也可以不用r13做堆栈,你可以写个编译器用r0做堆栈。
中断必须会将PC硬件压栈,硬件压栈的SP不是编译器,是硬件固定了的。你另搞个SP指针,只是另起炉灶开个软栈,原来的灶并没熄火,各做各的饭。。。大体相当于不用硬件IIC模块,软件去模拟,芯片面积并没因为不用IIC而减少。 汇编语言自己管理堆栈 huangqi412 发表于 2017-10-20 16:01
中断必须会将PC硬件压栈,硬件压栈的SP不是编译器,是硬件固定了的。你另搞个SP指针,只是另起炉灶开个 ...
arm的arm模式 shiva_shiva 发表于 2017-10-20 15:00
印象中,m系列的arm都是一条指令压栈好几个数据,难道不是硬件的?
照这么说所有的指令都是硬件实现的。 额push pop 用起来可蛋疼了 目测楼主一天内不会上线 这也算技术问题?还有半小时........ 谁告诉你汇编语言不需要堆栈的? armok 发表于 2017-10-20 16:11
“插播一则技术问题,期待大神帮忙解答(Thanks) 只看楼主 ”不是合格的标题。
违反版规11。请立即阅读 ...
不好意思今天加班没看到,贴子已经不可以编辑了,还有什么办法可以挽救吗?? atommann 发表于 2017-10-20 21:30
谁告诉你汇编语言不需要堆栈的?
全是全局变量就不用了 楼主来发了一贴,讨论精彩。 楼主是伪命题 vuo50z 发表于 2017-10-20 23:52
全是全局变量就不用了
函数过程调用,不论是硬件自己压,还是我们手动压,那都是栈,总是离不开栈的。 本帖最后由 vuo50z 于 2017-10-21 19:16 编辑
security 发表于 2017-10-21 09:25
函数过程调用,不论是硬件自己压,还是我们手动压,那都是栈,总是离不开栈的。 ...
抬杠的方法:a函数把局部变量(包括链接寄存器和其它要保存的寄存器)放在A处,b函数把局部变量放在B处……
这样的函数除了不可重入也可以工作。 汇编中的栈由人工管控。 太有趣了这种问题牵扯一部分迷茫的人
你以为的你以为的就是你以为的
页:
[1]