ATPCS中的一些规则

     完全使用汇编语言来编写程序会非常的繁琐,因此通常情况下,只是使用汇编程序来完成少量必须由汇编程序才能完成的工作,而其它工作则由C语言程序来完成。这样一来,我们实际上就是在进行汇编和C的混合编程,甚至同一个程序的汇编源文件和C源文件是由不同的程序员编写的。在这种情况下,要想使不同程序员编写的汇编代码和C代码能耦合的很好,则必须有一个双方都必须遵守的规则,这就是ATPCS规则。
    ATPCS规则(函数过程调用标准)
R0-R3用于传递参数,R4-R11用于保存子程序中的局部变量,R14用于保存子程序的返回地址,子程序的返回值友R0来传递。

ATPCS(ARM-Thumb Procedure Call Standard)是ARM程序和Thumb程序中子程序调用的基本规则,目的是为了使单独编译的C语言程序和汇编程序之间能够相互调用。这些基本规则包括子程序调用过程中寄存器的使用规则、数据栈的使用规则和参数的传递规则。

a)、寄存器R0 -- R11被分为2组:a1 -- a4,v1 – v8。所以对于兼容ATPCS的编译器而言,在编程的时候可以使用a1替换R0

b)、除了R13 -- R15有别名外,对于兼容ATPCS的编译器而言,也可以使用其它寄存器的别名:wr, sb, sl, fp, ip,它们都有自己的一些特殊用法

c)、寄存器R0 -- R3用于传递子程序的参数和返回结果(详见本文后部)

d)、寄存器a1 -- a4和ip是scratch寄存器(即:临时寄存器),其值在进行子程序调用时不需要保存和恢复。

参数传递(4个参数)以及结果返回 :很显然,主调程序在调用子程序之前,将要传递给子程序的4个参数准备在了R0~R3中,从而使得子程序可以通过该4个寄存器获得转递给它的参数(即:4个参数是通过寄存器R0~R3来传递的);子程序在返回之前,将返回值放在了寄存器R0中,从而使得主调函数可以通过R0来获得子程序的返回值(即:结果为一个32位的整数时,通过寄存器R0返回)

你可能感兴趣的:(ATPCS中的一些规则)