免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: crifan

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

论坛徽章:
0
发表于 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
push pop.jpg

push pop -1.jpg

push pop -2.jpg

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

论坛徽章:
0
发表于 2011-05-03 11:13 |显示全部楼层
好贴,顶了

论坛徽章:
0
发表于 2011-07-05 09:38 |显示全部楼层
感谢楼主分享经验。

论坛徽章:
0
发表于 2011-07-07 09:53 |显示全部楼层
arm指令集中有push和pop指令,只是很多时候都会用ldmfd stmfd来操作sp

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

论坛徽章:
0
发表于 2012-08-17 15:13 |显示全部楼层
感谢楼主,让人豁然开朗

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

论坛徽章:
0
发表于 2013-01-24 08:24 |显示全部楼层
回复 1# crifan
终于明白了,天,太感谢了!


   

论坛徽章:
0
发表于 2013-01-27 22:15 来自手机 |显示全部楼层
学习了,温习了下堆栈的基本知识
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2020中国数据库技术大会

【架构革新 高效可控】2020年12月21日-23日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


大会官网>>
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP