ARM体系函数调用过程分析

本文分析了ARM体系下的函数调用过程,包括栈的运作原理、特殊寄存器的作用,以及调用过程中的栈帧布局。在调用过程中,寄存器如PC、LR、SP、FP等各有其特定功能,如保存返回地址、保护现场等。通过汇编代码示例,阐述了函数调用时如何压栈和恢复现场,以及参数传递和局部变量的处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、背景:

1、栈描叙:

  栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的

原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据

(最后一个数据被第一个读出来)。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。

  进函数需要压栈操作,保存需要的信息;出函数时需要出栈操作,恢复现场。

2、特殊寄存器:

  r0  ~ r3 通常用于传参;

  r15  ->  pc  => 当前程序执行位置;

  r14  ->  lr  => 连接寄存器:跳转指令自动把返回地址放入r14中;

  r13  ->  sp  => 栈指针:指向上一帧的栈底;

  r12  ->  ip  => ip 内部过程调用寄存器Intra-Procedure-call scratch register,其实就是r12;

  r11  ->  fp  => 当前函数栈帧的栈底,也就是栈基地址FP;

BL  NEXT     ;跳转到子程序NEXT处执行
.........    ;
NEXT
..........
MOV  PC,LR   ;从子程序返回,

这里的BL是跳转的意思,LR(R14)保存了返回地址
PC(R15)是当前地址,把LR给PC就是从子程序返回

二、调用过程:

  下图描述的是ARM的栈帧布局方式,main stack frame为调用函数的栈帧,func1 stack frame为

当前函数(被调用者)的栈帧,栈底在高地址,栈向下增长。图中FP就

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值