- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
中国十大品牌IT教育机构 ARM体系结构过程调用标准 (AAPCS --Procedure Call Standard for the ARM Architecture) 第五章 本章内容 1. 数据类型 2. 基本过程调用标准 3. C/C++语言数据类型 AAPCS介绍 AAPCS定义了一套机制,使得来自不同编译语言的例程(如:C、Pascal、汇编)可以交织使用。 APCS 定义了: 对寄存器使用的限制。 使用栈的惯例。 在函数调用之间传递/返回参数。 可以被‘回溯’的基于栈的结构的格式,用来提供从失败点到程序入口的函数(和给予的参数)的列表。 数据类型 基本数据类型 类型 机器类型 所占字节数 字符型 无符号字节(Unsigned byte) 1 有符号字节(Signed byte) 1 整数型 无符号半字(Unsigned half-word) 2 有符号半字(Signed half-word) 2 无符号字(Unsigned word) 4 有符号字(Signed word) 4 无符号双字(Unsigned double-word) 8 有符号双字(Signed double-word) 8 浮点型 单精度浮点(Single precision) 4 双精度浮点(Double precision) 8 指针型 数据指针(Data pointer) 4 代码指针(Code pointer) 4 字节顺序 大端模式(big-endian) 小端模式(little-endian) 混合数据类型——一种或多种数据类型的组合 1. 聚集:其元素在内存中顺序排列 2. 联合:其元素共享相同的内存地址 3. 数组:其元素为相同的数据类型 2. 基本过程调用标准 基本过程调用标准可以确保分别编译或汇编的子程序能够协同工作。 2.1 寄存器 2.2 进程、内存和栈 2.3 子程序调用标准 2.4 结果返回 2.5 参数传递 2.1 寄存器 ARM/Thumb指令集编程时共有16个32位通用寄存器可见,在汇编中表示为r0~r15或R0~R15。在过程调用标准中,每个寄存器都有其特定的角色。 寄存器的特定角色 寄存器编号 可选寄存器名 特殊寄存器名 寄存器用法 R0 a1 函数调用时的参数寄存器,用来存放前4个函数参数并存放返回值。在函数内如果将这些寄存器用作其他用途,将破坏其值。 R1 a2 R2 a3 R3 a4 R4 v1 通用变量寄存器 R5 v2 R6 v3 R7 v4 R8 v5 R9 v6或SB或 TR 平台寄存器,不同的平台对该寄存器的定义不同 R10 v7 通用变量寄存器。在使用堆栈边界检测的情况下,r10保存堆栈边界地址 R11 v8 通用变量寄存器 R12 IP 临时过渡寄存器,函数调用时会破坏其值 R13 SP 堆栈指针 R14 LR 链接寄存器 R15 PC 程序计数器 程序状态寄存器(CPSR) N Z C V — — I M0 M1 M2 M3 M4 T F — . . . 31 30 29 28 27 26 8 7 6 5 4 3 2 1 0 条件代码标志 保留 控制位 溢出标志 进位或借位扩展 零 负或小于 IRQ禁止 FIQ禁止 状态位 模式位 N Z C V I M0 M1 M2 M3 M4 T F 2.2 进位、内存和栈 程序执行过程中,将内存划分为以下5种类型: 1. 代码段 2. 只读数据段 3. 可读写数据段 4. 栈(stack) 5. 堆(heap) 2.3 子程序调用标准 BL指令 2.4 结果返回 小于4字节的基本数据类型进行符号扩展成32位,结果保存在r0返回 4字节大小的基本数据类型(如int)直接通过r0返回 双字大小的数据类型(如long long、double)通过r0和r1返回,其中r0包含返回结果的低32位 不大于4字节的复合数据类型,结果保存在r0中返回(格式按使用LDR指令按字边界对齐从内存中读取) 大于4字节的复合数据类型,将结果的内存地址通过r0返回 2.5 参数传递 固定个数自变量的函数 前面的整形参数按顺序分配给r0~r3 其余参数按顺序分配给堆栈 可变个数自变量的函数 参数值使用a1~a4传递 * 要定义一个寄存器名字,典型的,要在程序最开始的地方使用 RN 宏指令(directive): a1 RN 0 a2 RN 1 a3 RN 2 这个例子展示了一些重要的东西: 寄存器可以定义多个名字 - 你可以定义‘r13’和‘sp’二者。 寄存器可以
您可能关注的文档
最近下载
- 学堂在线e时代的教与学—慕课引发的混合式教学1-5周作业答案+考试答案.docx VIP
- pep人教版四年级英语下册期末考试卷(可打印).pdf VIP
- 2023年副高(临床药学)考试真题卷.pdf VIP
- 私人订制旅行行程安排及免责.doc VIP
- 沪教版四年级下册英语期末测试卷附参考答案.pdf VIP
- 中泰化学2024环境、社会及治理(ESG)报告.docx
- 标准图集-西南18J515_室内装修.pdf VIP
- 《数据分析基础与案例实战(基于Excel软件)(第2版)》全套教学课件.pptx
- 人教版三年级英语下册期末测试卷及答案【完美版】.pdf VIP
- 基于PLC的变频器多段速调速系统设计.doc VIP
文档评论(0)