您的位置 首页 电源

ARM-Thumb 进程调用规范

寄存器ATPCS指定用于特殊用途的寄存器-使用寄存器r0-r3将参数值传送到函数,并将结果值传出。可以用a1-a4来引用r0-r3,以使…

寄存器

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 页的浮点选项)。
– 较长的值有必要在内存中直接回来。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/dianyuan/275074.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部