首页
社区
课程
招聘
[原创]arm平台c语言函数传参及返回值约定浅析
发表于: 2017-6-28 01:41 4599

[原创]arm平台c语言函数传参及返回值约定浅析

2017-6-28 01:41
4599

测试用编译器:gcc 

优化选项:-O2


a

输入参数通过r0-r3传递,多余的放入堆栈中;返回值放入r0,不够的话放入 {r0,r1}

1

int fun1(int a, int b, int c, int d)

输入:a = r0

     b = r1

     c = r2

     d = r3

返回:r0

2

int* fun2(int a, double b, short c, char d)

输入:a = r0

     r1用于对齐(double需要8字节对齐)

     b = {r2, r3}

     c 放在堆栈的sp[0]位置

     d 放在堆栈的sp[4]位置,这里的sp是指进入函数时的sp

返回:r0 

3

double fun3(double a, int b, short c, char d)

输入:a = {r0, r1}

     b = r2

     c = r3 

     d 放在堆栈的sp[0]位置,这里的sp是指进入函数时的sp

返回:{r0,r1}

b

结构体作为参数传递时,当结构体内容{r0,r1,r2,r3}放不下时,多余的放入堆栈中

1

struct tagTest {


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 1
支持
分享
最新回复 (4)
雪    币: 1307
活跃值: (4151)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
2
整理的不错
2017-6-28 10:31
0
雪    币: 47147
活跃值: (20460)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
3
欢迎整理更多的
2017-6-28 11:56
0
雪    币: 111
活跃值: (67)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
kanxue 欢迎整理更多的
好的
2017-6-28 12:12
0
雪    币: 1696
活跃值: (2297)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
感谢分享
2017-6-28 16:23
0
游客
登录 | 注册 方可回帖
返回
//