欢迎来到天天文库
浏览记录
ID:48757141
大小:699.00 KB
页数:13页
时间:2020-01-22
《第五章 ARM过程调用标准.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、ARM体系结构过程调用标准(AAPCS--ProcedureCallStandardfortheARMArchitecture)第五章本章内容1.数据类型2.基本过程调用标准3.C/C++语言数据类型AAPCS介绍AAPCS定义了一套机制,使得来自不同编译语言的例程(如:C、Pascal、汇编)可以交织使用。APCS定义了:对寄存器使用的限制。使用栈的惯例。在函数调用之间传递/返回参数。可以被‘回溯’的基于栈的结构的格式,用来提供从失败点到程序入口的函数(和给予的参数)的列表。数据类型基本数据类型类型机器类型所占字节数字符型无符号字节(Unsignedbyte)1有符号字节(Signe
2、dbyte)1整数型无符号半字(Unsignedhalf-word)2有符号半字(Signedhalf-word)2无符号字(Unsignedword)4有符号字(Signedword)4无符号双字(Unsigneddouble-word)8有符号双字(Signeddouble-word)8浮点型单精度浮点(Singleprecision)4双精度浮点(Doubleprecision)8指针型数据指针(Datapointer)4代码指针(Codepointer)4字节顺序大端模式(big-endian)小端模式(little-endian)混合数据类型——一种或多种数据类型的组合1.聚
3、集:其元素在内存中顺序排列2.联合:其元素共享相同的内存地址3.数组:其元素为相同的数据类型2.基本过程调用标准基本过程调用标准可以确保分别编译或汇编的子程序能够协同工作。2.1寄存器2.2进程、内存和栈2.3子程序调用标准2.4结果返回2.5参数传递2.1寄存器ARM/Thumb指令集编程时共有16个32位通用寄存器可见,在汇编中表示为r0~r15或R0~R15。在过程调用标准中,每个寄存器都有其特定的角色。寄存器的特定角色寄存器编号可选寄存器名特殊寄存器名寄存器用法R0a1函数调用时的参数寄存器,用来存放前4个函数参数并存放返回值。在函数内如果将这些寄存器用作其他用途,将破坏其值。
4、R1a2R2a3R3a4R4v1通用变量寄存器R5v2R6v3R7v4R8v5R9v6或SB或TR平台寄存器,不同的平台对该寄存器的定义不同R10v7通用变量寄存器。在使用堆栈边界检测的情况下,r10保存堆栈边界地址R11v8通用变量寄存器R12IP临时过渡寄存器,函数调用时会破坏其值R13SP堆栈指针R14LR链接寄存器R15PC程序计数器程序状态寄存器(CPSR)NZCV——IM0M1M2M3M4TF—...313029282726876543210条件代码标志保留控制位溢出标志进位或借位扩展零负或小于IRQ禁止FIQ禁止状态位模式位NZCVIM0M1M2M3M4TF2.2进位、内
5、存和栈程序执行过程中,将内存划分为以下5种类型:1.代码段2.只读数据段3.可读写数据段4.栈(stack)5.堆(heap)2.3子程序调用标准BL指令2.4结果返回小于4字节的基本数据类型进行符号扩展成32位,结果保存在r0返回4字节大小的基本数据类型(如int)直接通过r0返回双字大小的数据类型(如longlong、double)通过r0和r1返回,其中r0包含返回结果的低32位不大于4字节的复合数据类型,结果保存在r0中返回(格式按使用LDR指令按字边界对齐从内存中读取)大于4字节的复合数据类型,将结果的内存地址通过r0返回2.5参数传递固定个数自变量的函数前面的整形参数按顺序
6、分配给r0~r3其余参数按顺序分配给堆栈可变个数自变量的函数参数值使用a1~a4传递
此文档下载收益归作者所有