博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
以stm32f407为例,学习cortex-m4通用寄存器的用法
阅读量:7154 次
发布时间:2019-06-29

本文共 541 字,大约阅读时间需要 1 分钟。

测试代码如下:

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

 

转载于:https://www.cnblogs.com/yanhc/p/9943568.html

你可能感兴趣的文章
sed 与 awk
查看>>
《Effective C#》读书笔记——条目24:用委托实现回调<使用C#表达设计>
查看>>
远程连接 sql2005
查看>>
JS倒计时代码
查看>>
Web.config总结
查看>>
c++的重载,覆盖与隐藏
查看>>
35种神奇的心理效应
查看>>
[置顶] 搭建一个流媒体服务器--引子
查看>>
String,StringBuffer与StringBuilder的差别??
查看>>
普林斯顿公开课 算法2-3:插入排序
查看>>
HTML5游戏开发引擎Pixi.js新手入门讲解
查看>>
51单片机寄存器组的设置(转)
查看>>
Unity 实现物体破碎效果(转)
查看>>
ASIHTTPRequestErrorDomain Code=5
查看>>
2011年排名前七位的Linux操作系统。
查看>>
SECURITY_ATTRIBUTES 设置低权限
查看>>
php中array_merge合并数组详解
查看>>
阅读jquery源码与js依赖加载的模块化!
查看>>
boost::thread用法
查看>>
计算机原理 发展简史
查看>>