ATPCS标准概述

ADS编译链接环境定义了统一的函数过程调用标准ATPCS(ARM-Thumb Procedure Call Standard)。

1、概述:

 ATPCS定义{R0–R3}为参数传递和结果返回寄存器; 若参数超过4个字型(32bit),则使用堆栈进行传递; ———内部寄存器的存取速度要远远大于存储器,一般应尽量使参数传递通过寄存器事项,即应尽量控制函数的参数在4个字型以下,使得函数调用尽量快、小、易于优化。 ———深入理解ATPCS有助于透彻理解C与汇编混合调用时参出传递;

2、ATPCS中定义的寄存器:

 

The first four registers r0-r3 are used to pass parameter values into a routine and result values out of a routine, and to hold intermediate values within a routine (but, in general, only between subroutine calls). In ARM-state, register r12—also called IP—can also be used to hold intermediate values between subroutine calls. Typically, the registers from r4 to r11 are used to hold the values of a routine’s local variables. They are also labeled v1-v8. In all variants of the procedure call standard, registers r12-r15 have special roles. In these roles they are labeled IP, SP, LR and PC (or ip, sp, lr, and pc).

3、子程序调用:

子程序调用通过可实现如下功能的指令实现: LR <-- return address PC <-- destination address ... return address: ... 这在ARM一般可通过一条BL指令达到。ATPCS规定子程序调用前后内核寄存器状态:

 ———因此,利用ADS编译环境(遵循ATPCS标准)编译后的子程序汇编代码一般不会对r4~r11操作,这也是如下两条语句普见于汇编代码中的原因(子程序中仅对r0~r3、r12等进行操作,故也只对这些个寄存器入栈出栈保护): STMFD SP!, {R0-R3, R12, LR} …… …… LDMFD SP!, {R0-R3, R12, PC}^

4、参数传递:

头4个参数依次存于R0...R3,大于4个的后续字型参数通过栈传送,见ATPCS中的陈述:

5、返回值:

 一个子程序调用可能没有返回值(void型),也可能有1-4个字型(32bits)值返回(这里仅讨论返回值小于等于四的情况),这些返回值也装载在r0-r3中:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值