ATPCS規定了一些子程式之間呼叫的基本規則.這些基本規則含括子程式呼叫過程中暫存器的使用規則,資料堆疊的使用規則,引數的傳遞規則.為適應一些特定的需要,對這些基本的呼叫規則進行一些修改得到幾種不同的子程式呼叫規則,這些特定的呼叫規則含括: 支援資料堆疊限制檢查的ATPCS. 支援唯讀段位置無關的ATPCS. 支援可讀寫段位置無關的ATPCS. 支援ARM程式和THUMB程式混合使用的ATPCS. 處理浮點運算的ATPCS... ATPCS(ARM Thumb Procedure Call Standard)是一套定义了在ARM和Thumb指令集下子程序调用规则的标准。这个标准详细规定了子程序调用时如何使用寄存器、管理堆栈以及传递参数的方式,以便于C语言编译器和汇编程序之间的交互。 一、ATPCS的基本原则 ATPCS的主要目标是确保程序的可移植性和兼容性。基本的ATPCS规定包括: 1. 子程序通过R0-R3寄存器传递参数,这些寄存器有时被称作A0-A3。子程序返回时无需恢复这些寄存器的原始值。 2. R4-R11(或在Thumb模式下的R4-R7)用于存储局部变量,称为V1-V8。进入子程序时,如果使用了这些寄存器,必须保存它们的值,并在返回前恢复。 3. R12作为子程序间的工作寄存器(ip),常用于连接代码段。 4. R13(SP)作为堆栈指针,必须保持在子程序进入和退出时的值不变。 5. R14(lr)作为链接寄存器,用于存储子程序的返回地址,但若已存储返回地址,也可用于其他目的。 6. R15(PC)是程序计数器,不应用于其他功能。 7. 所有这些寄存器在ARM编译器和汇编器中都有预定义的作用。 二、扩展的ATPCS 为了适应不同需求,有几种扩展的ATPCS变体: 1. 支持堆栈限制检查的ATPCS,用于确保堆栈使用不会超出预定范围。 2. 唯读段位置无关的ATPCS,允许代码在内存中的任何位置运行,即使包含只读数据。 3. 可读写段位置无关的ATPCS,同样提供位置无关代码支持,但允许修改数据。 4. 支持ARM和Thumb程序混合使用的ATPCS,使得两种模式的代码能互相调用。 5. 处理浮点运算的ATPCS,为浮点计算提供特定的寄存器和调用约定。 三、数据堆栈规则 ATPCS规定数据堆栈为“FD”类别,即堆栈向下扩展,并且每次操作都以8字节对齐。堆栈指针指向最后写入的堆栈数据的地址,而堆栈基址则是堆栈的最高地址。在调用子程序时,通常会压入参数和保存寄存器的值,然后在返回时弹出。堆栈的增长和收缩遵循这些规则,以保证程序的正确执行。 总结,ATPCS是ARM架构下子程序调用的重要规范,它定义了寄存器的使用、堆栈管理以及参数传递的方法。理解并遵循这些规则对于编写高效、兼容的ARM和Thumb代码至关重要。无论是使用C语言编译器还是汇编器,开发者都需要熟悉这些规则,以确保代码能够在各种环境中正确运行。
- ldr1112012-07-23难得的东西,这个可能对一般的人没什么用,但对我(做反向工程的)来说,还是相当有用的
- 粉丝: 0
- 资源: 21
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- zblog站群:zblog seo站群高收录排名全地域霸屏
- 【安卓毕业设计】数独联网对战APP源码(完整前后端+mysql+说明文档).zip
- 【安卓毕业设计】Android天气小作业源码(完整前后端+mysql+说明文档).zip
- 【安卓毕业设计】群养猪生长状态远程监测源码(完整前后端+mysql+说明文档).zip
- 【安卓毕业设计】奶牛管理新加功能源码(完整前后端+mysql+说明文档).zip
- C#.NET公墓陵园管理系统源码数据库 SQL2008源码类型 WebForm
- 作业这是作业文件这是作业
- 【物理化学实验报告】挥发性双液系气-液平衡相图的测绘.pdf
- 4353_135543959.html
- C#物联订单仓储综合管理系统源码 物联综合管理系统源码数据库 SQL2008源码类型 WebForm