理解ATPCS:ARM与Thumb程序调用规范

5星 · 超过95%的资源 需积分: 9 1 下载量 140 浏览量 更新于2024-09-18 收藏 455KB PDF 举报
"ATPCS(ARM Thumb Procedure Call Standard)是ARM处理器中的一种调用约定,用于规范C语言和汇编语言之间子程序调用的规则,确保二者能正确交互。ATPCS主要关注寄存器使用、数据栈管理和参数传递等方面,以确保程序的兼容性和可维护性。" 在ATPCS中,主要的规则可以分为以下几类: 1. **寄存器使用规则**: - R0-R3(也称为A0-A3)用于传递函数参数,子程序结束时不需要恢复这些寄存器的值。 - R4-R11(V1-V8)作为局部变量寄存器,如果使用,需在进入子程序时保存其值,并在退出前恢复。 - R12(ip)用作临时工作寄存器,通常在子程序之间的连接代码中使用。 - R13(sp)作为数据栈指针,其值在子程序开始和结束时必须保持一致。 - R14(lr)是连接寄存器,用于存储子程序的返回地址。 2. **数据栈使用规则**: - 数据栈由R13(sp)管理,其增长方向通常是向下。在子程序中,R13不能用作其他目的,必须保持栈的完整性和一致性。 3. **参数传递规则**: - 参数通常通过寄存器R0-R3传递,超出4个参数的部分可能需要通过栈来传递。 - 在Thumb模式下,由于寄存器限制,通常只使用R4-R7来保存局部变量。 4. **C语言库与链接器支持**: - 编译器和汇编器会根据用户选择的ATPCS类型在目标文件中设置相应的属性。 - 链接器会根据指定的ATPCS类型连接合适的C语言库,以保证调用一致性。 5. **汇编语言程序的注意事项**: - 汇编语言程序员需要确保子程序遵循选定的ATPCS,包括寄存器的使用、栈管理以及参数传递的规则。 - 使用汇编编译器时,需要添加`-apcs`选项来指定使用ATPCS。 ATPCS是ARM体系结构中关键的组成部分,它确保了不同模块之间的接口规范,使得开发者能够在C和汇编语言之间自由切换,而不会出现兼容性问题。了解并遵循ATPCS规则对于编写高效、可靠的ARM平台代码至关重要。在实际编程中,开发者需要根据具体的项目需求和处理器模式(ARM或Thumb)来灵活应用这些规则。