码迷,mamicode.com
首页 > 其他好文 > 详细

以stm32f407为例,学习cortex-m4通用寄存器的用法

时间:2018-11-11 23:39:38      阅读:507      评论:0      收藏:0      [点我收藏+]

标签:info   调用   输入参数   http   png   初始   参数   bsp   输入   

测试代码如下:

int add(int a, int b, int c, int d, int e, int f)
{
    return a+b+c+d+e+f;
}

int main(void)

{
    int g;
    
    g = add(1,2,3,4,5, 6);

 

设置断点后,如下图所示,进入add函数前,将函数输入参数存入寄存器,r0=6, r1=5, r3=4, r2=3, 由于输入参数只能用r0-r4这4个寄存器,因此,需要将r0和r1存入堆栈,然后,再将剩余的2和1两个输入参数存入r1和r0,然后,跳到add的地址。

技术分享图片

下图,跳到add的地址处了,因为,有6个参数的运算,外加输出结果,一共需要7个寄存器,即需要r0-r3之外,还需要r4,r5,r6;所以,首先,将r4、5、6存入堆栈;同时,在add里可能还需要调用其它函数,因此,也将lr存入堆栈(每个函数初始,都需要将lr存入堆栈)。

然后,由于r0用于存放计算结果,返回值,因此,将r0存入r4,同时,将堆栈里的另外2两个输入参数,提取出来放到r5和r6中。

然后,就可以计算了,最后的计算结果在r0中。

技术分享图片

 

以stm32f407为例,学习cortex-m4通用寄存器的用法

标签:info   调用   输入参数   http   png   初始   参数   bsp   输入   

原文地址:https://www.cnblogs.com/yanhc/p/9943568.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!