第8章 ARM汇编语言与嵌入式C混合编程(2).ppt
《第8章 ARM汇编语言与嵌入式C混合编程(2).ppt》由会员分享,可在线阅读,更多相关《第8章 ARM汇编语言与嵌入式C混合编程(2).ppt(45页珍藏版)》请在汇文网上搜索。
1、第第8章章 ARM汇编语言与嵌入式汇编语言与嵌入式C混合编程混合编程本本章章首首先先简简要要的的介介绍绍了了嵌嵌入入式式C语语言言的的编编程程规规范范,嵌嵌入入式式开开发发中中常常用用的的位位运运算算与与控控制制位位域域及及在在嵌嵌入入式式C程程序序设设计计中中要要注注意意的的问问题题,为为读读者者进进行行嵌嵌入入式式C程程序序设设计计打打基基础础。然然后后介介绍绍在在ARM汇汇编编语语言言与与嵌嵌入入式式C语语言言进进行行相相互互调调用用的的标标准准(AAPCS),并并以以大大量量的的实实例例说说明明了了相相互调用应注意的问题。互调用应注意的问题。内容提要内容提要81 嵌入式嵌入式C编程规范
2、编程规范82 嵌入式嵌入式C程序设计中的位运算程序设计中的位运算83 嵌入式嵌入式C程序设计中的几点说明程序设计中的几点说明84 嵌入式嵌入式C程序设计格式程序设计格式85 过程调用标准过程调用标准ATPCS与与AAPCS86 ARM汇编语言与嵌入式汇编语言与嵌入式C混合编程混合编程8.5过程调用标准过程调用标准ATPCS与与AAPCSn过程调用标准过程调用标准ATPCS(ARM-Thumb Produce Call Standard)规定了子程序间相互调用的基本规)规定了子程序间相互调用的基本规则,则,ATPCS规定子程序调用过程中寄存器的使用规定子程序调用过程中寄存器的使用规则、数据栈的使
3、用规则及参数的传递规则。规则、数据栈的使用规则及参数的传递规则。n2007年,年,ARM公司推出了新的过程调用标准公司推出了新的过程调用标准AAPCS(ARM Architecture Produce Call Standard),它只是改进了原有的它只是改进了原有的ATPCS的二进制的二进制代码的兼容性。代码的兼容性。8.5.1寄存器使用规则寄存器使用规则n(1)子程序间通过寄存器)子程序间通过寄存器R0R3传递参数,传递参数,寄存器寄存器R0R3可记作可记作A1A4。被调用的子。被调用的子程序在返回前无须恢复寄存器程序在返回前无须恢复寄存器R0R3的内容。的内容。n(2)在子程序中,)在子
4、程序中,ARM状态下使用寄存器状态下使用寄存器R4R11来保存局部变量,寄存器来保存局部变量,寄存器R4R11可记作可记作V1V8;Thumb状态下只能使用状态下只能使用R4R7来保存局部变量。来保存局部变量。n(3)寄存器)寄存器R12用作子程序间调用时临时保用作子程序间调用时临时保存栈指针,函数返回时使用该寄存器进行出存栈指针,函数返回时使用该寄存器进行出栈,记作栈,记作IP;在子程序间的链接代码中常有;在子程序间的链接代码中常有这种使用规则。这种使用规则。n(4)通用寄存器)通用寄存器R13用作数据栈指针,记作用作数据栈指针,记作SP。n(5)通用寄存器)通用寄存器R14用作链接寄存器用
5、作链接寄存器;n(6)通用寄存器)通用寄存器R15用作程序计数器,记作用作程序计数器,记作PC。8.5.2数据栈使用规则数据栈使用规则n 过程调用标准规定数据栈为过程调用标准规定数据栈为FD类型,并且对类型,并且对数据栈的操作时要求数据栈的操作时要求8字节对齐的。字节对齐的。8.5.3参数传递规则参数传递规则n1参数个数可变的子程序参数传递规则参数个数可变的子程序参数传递规则n对于参数个数可变的子程序,当参数个数不对于参数个数可变的子程序,当参数个数不超过超过4个时,可以使用寄存器个时,可以使用寄存器R0R3来传递;来传递;当参数个数超过当参数个数超过4个时,还可以使用数据栈进个时,还可以使用
6、数据栈进行参数传递。行参数传递。n参数个数固定的子程序参数传递规则参数个数固定的子程序参数传递规则n如果系统不包含浮点运算的硬件部件且没有浮点参如果系统不包含浮点运算的硬件部件且没有浮点参数时,则依次将各参数传送到寄存器数时,则依次将各参数传送到寄存器R0R3中,中,如果参数个数多于如果参数个数多于4个,将剩余的字数据通过数据个,将剩余的字数据通过数据栈来传递;栈来传递;n如果包括浮点参数则要通过相应的规则将浮点参数如果包括浮点参数则要通过相应的规则将浮点参数转换为整数参数,然后依次将各参数传送到寄存器转换为整数参数,然后依次将各参数传送到寄存器R0R3中。如果参数多于中。如果参数多于4个,将
7、剩余字数据传送个,将剩余字数据传送到数据栈中,入栈的顺序与参数顺序相反,即最后到数据栈中,入栈的顺序与参数顺序相反,即最后一个字数据先入栈。一个字数据先入栈。n如果系统包含浮点运算的硬件部件,将按照如果系统包含浮点运算的硬件部件,将按照如下规则传递:如下规则传递:n各个浮点参数按顺序处理各个浮点参数按顺序处理n为每个浮点参数分配寄存器。分配方法是:找到为每个浮点参数分配寄存器。分配方法是:找到编号最小的满足该浮点参数需要的一组连续的编号最小的满足该浮点参数需要的一组连续的FP寄存器进行参数传递。寄存器进行参数传递。n子程序结果返回规则子程序结果返回规则n(1)结果为一个)结果为一个32位的整数
8、时,通过寄存器位的整数时,通过寄存器R0返回;结果返回;结果为一个为一个64位整数时,通过寄存器位整数时,通过寄存器R0,R1返回。返回。n(2)结果为一个浮点数时,可以通过浮点运算部件的寄存)结果为一个浮点数时,可以通过浮点运算部件的寄存器器F0、D0或者或者S0来返回;结果为复合型的浮点数(如复数)来返回;结果为复合型的浮点数(如复数)时,可以通过寄存器时,可以通过寄存器F0Fn或者或者0n来返回。来返回。n(3)对于位数更多的结果,需要通过内存来传递。)对于位数更多的结果,需要通过内存来传递。86 ARM汇编语言与嵌入式汇编语言与嵌入式C混合编程混合编程n在嵌入式程序设计中,有些场合(如
9、对具体在嵌入式程序设计中,有些场合(如对具体的硬件资源进行访问)必须用汇编语言来实的硬件资源进行访问)必须用汇编语言来实现,可以采用在嵌入式现,可以采用在嵌入式C语言程序中嵌入汇语言程序中嵌入汇编语言或嵌入式编语言或嵌入式C语言调用汇编语言来实现。语言调用汇编语言来实现。n过程调用标准过程调用标准ATPCS/AAPCS是学习嵌入式是学习嵌入式程序调用的基础内容,详细说明请参考程序调用的基础内容,详细说明请参考教材教材ARM嵌入式系统结构与编程嵌入式系统结构与编程第第8章章8.5节节8.61 内嵌汇编内嵌汇编n(1)ARM开发工具编译环境下内嵌汇编语法格式开发工具编译环境下内嵌汇编语法格式ARM
10、开发工具编译环境下实例开发工具编译环境下实例n(2)GNU ARM环境下内嵌汇编语法格式环境下内嵌汇编语法格式GNU ARM环境下实例环境下实例n2.内嵌汇编的局限性内嵌汇编的局限性nARM开发工具编译环境下内嵌汇编语言,指令操作开发工具编译环境下内嵌汇编语言,指令操作数可以是寄存器、常量或数可以是寄存器、常量或C语言表达式。可以是语言表达式。可以是char、short或或int类型,而且是作为无符号数进行类型,而且是作为无符号数进行操作。操作。n当表达式过于复杂时需要使用较多的物理寄存器,当表达式过于复杂时需要使用较多的物理寄存器,有可能产生冲突。有可能产生冲突。nGNU ARM编译环境下内
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
10 积分
下载 | 加入VIP,下载共享资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第8章 ARM汇编语言与嵌入式C混合编程2 ARM 汇编语言 嵌入式 混合 编程