zoukankan      html  css  js  c++  java
  • 以stm32f407为例,学习cortex-m4通用寄存器的用法

    测试代码如下:

    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中。

  • 相关阅读:
    日期类型存储方法
    Log4j2的一些记录
    【Maven】学习记录
    HTML 图片加载问题
    浏览器的组成
    javascript数组的实例属性(方法)
    javascript数组的内置对象Array
    javascript之this
    css的position,float属性的理解
    简单介绍帧动画
  • 原文地址:https://www.cnblogs.com/yanhc/p/9943568.html
Copyright © 2011-2022 走看看