Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1307994
  • 博文数量: 548
  • 博客积分: 7597
  • 博客等级: 少将
  • 技术积分: 4224
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-15 13:21
个人简介

嵌入式软件工程师&&太极拳

文章分类

全部博文(548)

文章存档

2014年(10)

2013年(76)

2012年(175)

2011年(287)

分类: LINUX

2011-02-20 19:55:05

						APCS(ARM过程调用标准)
						
							
一、寄存器的使用规则及其相应的名称

	寄存器编号 		别名			 使用规则
	
	R0				a1				参数寄存器
	R1 				a2 				不管有没有传递参数,被调用函数都不会保护a1 - a4的值
	R2 				a3 					
	R3 				a4
					 			
	R4 				v1 				通用变量寄存器
	R5 				v2 				被调用函数必须保护v1 - v8的值
	R6 				v3				如果被调用函数要使用变量寄存器,则要先保存寄存器的值到内存,函数返回时再恢复到寄存器
	R7 				v4	 
	R8 				v5
	R9 				v6 / sb			
	R10 			v7	/ sl 
	R11 			v8 / fp
	
	R12 			ip 				指令指针,通用临时过渡寄存器(草稿版),被调用函数会破坏ip的值
	R13 			sp 				栈指针 
	R14 			lr 				链接寄存器 
	R15				pc 				程序计数器 

二、参数 / 返回值的传递规则
	1、 	参数	char*	int
		位置	r0		r1
	
	2、	参数	char	int 	short int
		位置	r0		r1		r2		r3
	
	3、	参数	int	int 	int	int	char	int	double	int		//按4字节对齐
		位置	r0		r1		r2		r3		sp		sp+4	sp+8		sp+16
		
	4、	参数	char  longlong		int
		位置	r0		r2:r1			r3
		
	5、	参数	int 	int 	int	longlong		int		//编译器不会把longlong的一半放在r3再把另一半放在内存
		位置	r0		r1		r2		sp				sp+8
	
	6、	返回值	int
		位置	r0
		
	7、	返回值	longlong
		位置	r0:r1	
		
	8、返回值	longdouble
		位置	r3:r1:r0




阅读(468) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~