众所周知,ARM架构下,函数参数是通过 r0~r4寄存器传递的;但是如果参数超过四个,就要借助于栈了。
下面以一个例子说明。
main()的汇编如下:
这个时候(执行到箭头指向的位置),栈的状态如下:
函数 func的汇编如下:
此时,栈状态如下:
ldr r3, [r11, #4]
上面这一句汇编代码就是从栈上取回保存的第5个参数的值。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
ARM
+关注
关注
134文章
8615浏览量
361311 -
函数
+关注
关注
3文章
3845浏览量
61223 -
堆栈
+关注
关注
0文章
171浏览量
19441
发布评论请先 登录
相关推荐
C函数调用机制与栈帧原理详解
当一个C函数被调用时,函数的参数如何传递、堆栈指针如何变化、栈帧是如何被建立以及如何被消除的,一直缺乏系统性的理解,因此决定花时间学习下
发表于 06-08 10:49
•514次阅读
ARM基础下:函数参数类型知识
述范围之间呢?编译器必须把调用者和被调用者作出一致的决策,不是调用者,就是被调用者,必须把数据转换为short类型。如果参数可以不缩小到定义
发表于 08-27 13:44
请问在ARM的CodeWarrior中汇编与C程序调用的参数传递是怎么进行的
请问在ARM的CodeWarrior中汇编与C程序调用的参数传递是怎么进行的?比如这段汇编源代码:AREA asm,CODE,READONLYIMPORT addENTRYLDR r0
发表于 07-18 15:38
高效的C编程之函数调用
指令BL或MOV pc,lr一般只需要6个指令周期(ARM7上)。 在函数的入口和出口使用多寄存器加载/存储指令LDM和STM(Thumb指令使用PUSH和POP)提高函数体的执行效率。 AR
发表于 10-17 16:49
•6次下载
评论