ATPCS详解:ARM与Thumb程序调用规则与寄存器使用指南

需积分: 13 23 下载量 68 浏览量 更新于2024-09-11 1 收藏 449KB PDF 举报
ATPCS(Advanced Thumb Procedure Call Standard)规范是ARM架构中为确保在C语言和汇编语言之间进行有效、兼容的子程序调用而制定的一套规则。它主要应用于ARM程序和Thumb程序,这两种模式在处理效率和指令集上有所不同。ATPCS的主要目标是统一调用过程中的寄存器使用、数据栈管理和参数传递策略。 首先,ATPCS的重要性在于它定义了跨语言调用时的接口一致性,这对于软件的可维护性和模块化至关重要。它要求所有参与调用的子程序,无论其源码语言(C或汇编),都需遵循相同的规则,这包括: 1. **寄存器规则**: - 子程序间通过R0-R3寄存器(在ATPCS中称为A0-A3)传递参数,调用者无需恢复这些寄存器的内容。 - R4-R11(V1-V8)用于保存子程序内的局部变量,使用时需要在进入和退出子程序时保存和恢复它们。 - R12(ip,称为scratch寄存器)在子程序间通信中常作为临时存储。 - R13(sp,数据栈指针)在子程序中固定为栈指针,进入和退出时必须保持不变。 - R14(lr,连接寄存器)保存子程序的返回地址,必须正确处理。 2. **数据栈规则**: - 数据栈的管理遵循特定的规则,确保在调用和返回时栈帧的正确布局。 3. **参数传递规则**: - C语言编译器和链接器会根据用户选择的ATPCS类型自动处理参数传递,但汇编语言程序员需要手动确保遵守这些规则。 为了实现ATPCS,编译器会根据用户指定的ATPCS类型在ELF格式的目标文件中设置相应的属性,并在链接阶段选择相应的C语言库。在编写汇编语言程序时,开发者需要明确知道他们使用的ATPCS类型,并在编写代码时严格遵循上述规则,以确保子程序之间的调用能够无缝进行。 ATPCS规范是ARM开发中不可或缺的一部分,它简化了跨语言调用的复杂性,提高了代码的可移植性和效率。了解并遵循ATPCS规则,是确保ARM程序和Thumb程序中子程序调用正确性的重要步骤。