免费注册 查看新帖 |

Chinaunix

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

[BootLoader] 为何C语言(的函数调用)需要堆栈,而汇编语言却不需要堆栈 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2011-04-21 17:14 |只看该作者
本帖最后由 crifan 于 2011-04-21 17:19 编辑
我查了一下,好像只有Thumb指令集才有pop和push。反正我是记得,以前看反汇编代码时,保护现场用的是str和l ...
tempname3 发表于 2011-04-21 16:27



    去arm官网查了下,arm和thumb,都是有push和pop指令的,这里有说明:
http://infocenter.arm.com/help/topic/com.arm.doc.dui0204ic/DUI0204IC_rvct_assembler_guide.pdf




论坛徽章:
0
12 [报告]
发表于 2011-04-21 17:19 |只看该作者
那就是我了解不深了。上课时没注意到有pop,push,实践时没看到过pop,push。stmfd和ldmfd可以用任意寄存器当栈指针么? 隐约记得老师讲过,arm指令集里没有非得sp不可的指令,thumb指令集里有指令默认了对sp操作。

论坛徽章:
0
13 [报告]
发表于 2011-05-03 11:13 |只看该作者
好贴,顶了

论坛徽章:
0
14 [报告]
发表于 2011-07-05 09:38 |只看该作者
感谢楼主分享经验。

论坛徽章:
0
15 [报告]
发表于 2011-07-07 09:53 |只看该作者
arm指令集中有push和pop指令,只是很多时候都会用ldmfd stmfd来操作sp

论坛徽章:
0
16 [报告]
发表于 2011-08-15 17:07 |只看该作者
我现在觉得,堆栈这么混合的说本身就不是非常好,堆(heap)和栈(stack)严格的说本身就是两个概念。保护上下文context和传递参数(参数>4的时候)是用的stack。

论坛徽章:
0
17 [报告]
发表于 2012-08-17 15:13 |只看该作者
感谢楼主,让人豁然开朗

论坛徽章:
0
18 [报告]
发表于 2013-01-18 07:58 |只看该作者
1、栈区(stack)— 程序运行时由编译器自动分配,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。程序结束时由编译器自动释放。
2、堆区(heap) — 在内存开辟另一块存储区域。一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表

论坛徽章:
0
19 [报告]
发表于 2013-01-24 08:24 |只看该作者
回复 1# crifan
终于明白了,天,太感谢了!


   

论坛徽章:
0
20 [报告]
发表于 2013-01-27 22:15 来自手机 |只看该作者
学习了,温习了下堆栈的基本知识
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP