嵌入式软件工程师&&太极拳
全部博文(548)
分类: 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