ARM-Thumb 过程调用标准

发布者:代码律动最新更新时间:2016-08-01 来源: eefocus关键字:ARM-Thumb  过程调用标准 手机看文章 扫描二维码
随时随地手机看文章
寄存器

ATPCS 指定用于特殊用途的寄存器
- 使用寄存器 r0-r3 将参数值传送到函数,并将结果值传出。可以用 a1-a4 来引用 r0-r3,以使此用法透明。请参阅第 3-9 页的参数传递。在子程序调用之间,可以将 r0-r3 用于任何用途。被调用函数在返回之前不必恢复 r0-r3。
如果调用函数需要再次使用 r0-r3 的内容,则它必须保留这些内容。
- 使用寄存器 r4-r11 存放函数的局部变量。可以用 v1-v8 来引用这些寄存器,以使此用法透明。在 Thumb 状态下,在大多数指令中只有寄存器 r4-r7 可以用于局部变量。
如果被调用函数使用了这些寄存器,它在返回之前必须恢复这些寄存器的值。
- 寄存器 r12 是内部调用暂时寄存器 ip。它在过程链接胶合代码(例如,交互操作胶合代码)中用于此角色。在过程调用之间,可以将它用于任何用途。被调用函数在返回之前不必恢复 r12。
- 寄存器 r13 是栈指针 sp。它不能用于任何其它用途。sp 中存放的值在退出被调用函数时必须与进入时的值相同。
- 寄存器 r14 是链接寄存器 lr。如果您保存了返回地址,则可以在调用之间将 r14 用于其它用途。
- 寄存器 r15 是程序计数器 PC。它不能用于任何其它用途。

    生成汇编程序语言时,编译程序使用特定名称和基本寄存器名。
另外,s0-s31、d0-d15 和 f0-f31 是浮点协处理器中寄存器的预定义名称。

 

ATPCS 中的寄存器角色和名称
寄存器 同义词 特定名称 过程调用标准中的角色
r15 - PC 程序计数器
r14 - lr 链接寄存器
r13 - sp 栈指针
r12 - ip 内部过程调用暂时寄存器
r11 v8 - ARM 状态变量寄存器 8
r10 v7 sl

ARM 状态变量寄存器 7

栈检查变体中的栈限制指针

r9 v6 sb

ARM 状态变量寄存器 6

RWPI 变体中的静态基址

r8 v5 - ARM 状态变量寄存器 5
r7 v4 - 变量寄存器 4
r6 v3 - 变量寄存器 3
r5 v2 - 变量寄存器 2
r4 v1 - 变量寄存器 1
r3 a4 - 自变量/结果/ 暂时寄存器 4
r2 a3 - 自变量/结果/ 暂时寄存器 3
r1 a2 - 自变量/结果/ 暂时寄存器 2
r0 a1 - 自变量/结果/ 暂时寄存器 1

 

   

 

 

 

 

 

 

 

 

 

 

 

 

 

    参数传递
有可变个数自变量的函数是 variadic。有固定个数自变量的函数是 nonvariadic。
向 variadic 和 nonvariadic 函数传递参数有不同的规则。
Nonvariadic 函数
参数值以下列方式传递到 nonvariadic 函数:
1. 前面的整型自变量按顺序分配给 r0-r3
2. 其余参数按顺序分配给栈

长整数分配
超过 32 位的整型参数(例如,long long 型)有 8 字节对齐。传递 long long 型
参数时,将它分配给寄存器 r2 和 r3,或者分配给栈。
浮点数分配
如果系统有浮点硬件,则 FP 参数如下列方式分配给 FP 寄存器:
1. 按次序检查每个 FP 参数。
2. 对于每个参数,检查可用的 FP 寄存器组。
3. 如果有一个可用,则将编号最低、尺寸适合于参数的相邻 FP 寄存器组分配给参数。

Variadic 函数
参数值在整型寄存器 a1-a4 中、必要时在栈中传递到 variadic 函数(a1-a4 是 r0-r3的同义词)。
使用的字顺序如同参数值存储在连续内存字中,然后传输到:
1. a1-a4,首先是 a1。
2. 栈,首先是最低地址。(这表示它们以相反的顺序推入栈中。)

    结果返回
函数可以:
- 在 a1 中返回单字整型值。
- 在 a1-a2、a1-a3 或 a1-a4 中返回双字或四字整型值。
- 在 f0、d0 或 s0 中返回浮点值。
- 在 f0-fN 或 d0-dN 中返回复合浮点值(如 complex)。N 的最大值取决于所选的浮点结构(请参阅第 3-17 页的浮点选项)。
- 较长的值必须在内存中间接返回。

关键字:ARM-Thumb  过程调用标准 引用地址:ARM-Thumb 过程调用标准

上一篇:ARM Linux内核启动要求
下一篇:ARM920T MMU-CP15协处理器的寄存器

小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved