0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ARM架构:函数调用参数超过四个的传递方法

如意 来源:CSDN 作者:CaspianSea 2020-06-22 14:36 次阅读

众所周知,ARM架构下,函数参数是通过 r0~r4寄存器传递的;但是如果参数超过四个,就要借助于栈了。

下面以一个例子说明。

ARM架构:函数调用参数超过四个的传递方法

main()的汇编如下:

ARM架构:函数调用参数超过四个的传递方法

这个时候(执行到箭头指向的位置),栈的状态如下:

ARM架构:函数调用参数超过四个的传递方法

函数 func的汇编如下:

ARM架构:函数调用参数超过四个的传递方法

此时,栈状态如下:

ldr r3, [r11, #4]

上面这一句汇编代码就是从栈上取回保存的第5个参数的值。

ARM架构:函数调用参数超过四个的传递方法

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • ARM
    ARM
    +关注

    关注

    134

    文章

    8615

    浏览量

    361311
  • 函数
    +关注

    关注

    3

    文章

    3845

    浏览量

    61223
  • 堆栈
    +关注

    关注

    0

    文章

    171

    浏览量

    19441
收藏 人收藏

    评论

    相关推荐

    C函数调用机制与栈帧原理详解

    当一个C函数调用时,函数参数如何传递、堆栈指针如何变化、栈帧是如何被建立以及如何被消除的,一直缺乏系统性的理解,因此决定花时间学习下
    发表于 06-08 10:49 514次阅读
    C<b class='flag-5'>函数</b><b class='flag-5'>调用</b>机制与栈帧原理详解

    C函数与汇编函数之间参数及返回值传递方法

    做了定义,明确了它们在函数中的职责:图 8AAPCS关于ARM寄存器的定义函数调用时的规则如下:1. 父函数与子
    发表于 09-30 13:34

    ARM基础下:函数参数类型知识

    述范围之间呢?编译器必须把调用者和被调用者作出一致的决策,不是调用者,就是被调用者,必须把数据转换为short类型。如果参数可以不缩小到定义
    发表于 08-27 13:44

    ARM函数调用参数传递规则(转载),记录一下

    之前在学习如何在C语言中嵌入汇编时有了解到C语言之前的参数调用是使用寄存器R0传递第一参数,R1传递
    发表于 03-31 10:44

    STM32四个串口的使用方法

    STM32四个串口的使用方法
    发表于 08-18 06:26

    Labview使用操作者架构时,同一操作者的私有方法之间如何传递参数

    Labview使用操作者架构时,同一操作者的私有方法之间如何传递参数?是否每个方法都需要创建一
    发表于 09-09 19:24

    ARM系统在函数调用的时候参数是通过哪种方式传递

    中断与异常有何区别?ARM系统在函数调用的时候参数是通过哪种方式传递的?
    发表于 12-24 06:21

    ARM函数调用过程说明

    ARM函数调用默认4参数用R0-R4传递,大于4
    发表于 04-26 10:05

    汇编代码中对C函数调用时如何进行参数传递以及如何从C函数正确返回呢

    参数传递以及如何从C函数正确返回不同于x86的参数传递规则,ATPCS建议函数的形参不
    发表于 05-07 10:02

    请问在ARM的CodeWarrior中汇编与C程序调用参数传递是怎么进行的

    请问在ARM的CodeWarrior中汇编与C程序调用参数传递是怎么进行的?比如这段汇编源代码:AREA asm,CODE,READONLYIMPORT addENTRYLDR r0
    发表于 07-18 15:38

    java方法参数传递简析

    一个参数传递方法中时,参数的值就是该对象的引用一个副本。指向同一个对象,对象的内容可以在被调用方法
    发表于 09-27 17:03 0次下载
    java<b class='flag-5'>方法</b><b class='flag-5'>参数</b><b class='flag-5'>传递</b>简析

    高效的C编程之函数调用

    指令BL或MOV pc,lr一般只需要6个指令周期(ARM7上)。 在函数的入口和出口使用多寄存器加载/存储指令LDM和STM(Thumb指令使用PUSH和POP)提高函数体的执行效率。 AR
    发表于 10-17 16:49 6次下载
    高效的C编程之<b class='flag-5'>函数</b><b class='flag-5'>调用</b>

    函数参数传递的原理

    参数传递,是在程序运行过程中,实际参数就会将参数传递给相应的形式参数,然后在
    的头像 发表于 03-02 11:41 6879次阅读
    <b class='flag-5'>函数</b><b class='flag-5'>参数</b><b class='flag-5'>传递</b>的原理

    C语言函数调用的形式及过程

    C语言函数调用时的数据传递调用有参函数时,主调函数和被调
    的头像 发表于 03-10 14:28 1055次阅读

    Arm64程序调用通用寄存器的使用方法

    下面是Arm64程序调用标准规定的通用寄存器的使用方法参数寄存器(X0-X7) 函数参数数量
    的头像 发表于 07-28 11:28 1740次阅读
    <b class='flag-5'>Arm</b>64程序<b class='flag-5'>调用</b>通用寄存器的使用<b class='flag-5'>方法</b>