第四讲 ARM汇编语言与嵌入式C混合编程(2).ppt
《第四讲 ARM汇编语言与嵌入式C混合编程(2).ppt》由会员分享,可在线阅读,更多相关《第四讲 ARM汇编语言与嵌入式C混合编程(2).ppt(43页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1TM1内容提要内容提要81 嵌入式嵌入式C编程规范编程规范82 嵌入式嵌入式C程序设计中的位运算程序设计中的位运算83 嵌入式嵌入式C程序设计中的几点说明程序设计中的几点说明84 嵌入式嵌入式C程序设计格式程序设计格式85 过程调用标准过程调用标准ATPCS与与AAPCS86 ARM汇编语言与嵌入式汇编语言与嵌入式C混合编程混合编程2TM28.5过程调用标准过程调用标准ATPCS与与AAPCSn过程调用标准过程调用标准ATPCS(ARM-Thumb Produce Call Standard)规定了子程序间相互调用的基本规)规定了子程序间相互调用的基本规则,则,ATPCS规定子程序调用过程中
2、规定子程序调用过程中寄存器的使用寄存器的使用规则、数据栈的使用规则及参数的传递规则规则、数据栈的使用规则及参数的传递规则。n2007年,年,ARM公司推出了新的过程调用标准公司推出了新的过程调用标准AAPCS(ARM Architecture Produce Call Standard),它只是改进了原有的它只是改进了原有的ATPCS的二进制的二进制代码的兼容性。代码的兼容性。3TM38.5.1寄存器使用规则寄存器使用规则n(1)子程序间通过寄存器)子程序间通过寄存器R0R3传递参数,传递参数,寄存器寄存器R0R3可记作可记作A1A4。被调用的子。被调用的子程序在返回前无须恢复寄存器程序在返回
3、前无须恢复寄存器R0R3的内容。的内容。4TM4n(2)在子程序中,)在子程序中,ARM状态下使用寄存器状态下使用寄存器R4R11来保存局部变量,寄存器来保存局部变量,寄存器R4R11可记作可记作V1V8;Thumb状态下只能使用状态下只能使用R4R7来保存局部变量。来保存局部变量。5TM5n(3)寄存器寄存器R12用作子程序间调用时临时保用作子程序间调用时临时保存栈指针存栈指针,函数返回时使用该寄存器进行出,函数返回时使用该寄存器进行出栈,记作栈,记作IP;在子程序间的链接代码中常有;在子程序间的链接代码中常有这种使用规则。这种使用规则。n(4)通用寄存器)通用寄存器R13用作数据栈指针,记
4、作用作数据栈指针,记作SP。6TM6n(5)通用寄存器)通用寄存器R14用作链接寄存器用作链接寄存器;n(6)通用寄存器)通用寄存器R15用作程序计数器,记作用作程序计数器,记作PC。7TM78.5.2数据栈使用规则数据栈使用规则n 过程调用标准规定过程调用标准规定数据栈为数据栈为FD类型类型,并且对,并且对数据栈的操作时要求数据栈的操作时要求8字节对齐字节对齐的。的。8TM88.5.3参数传递规则参数传递规则n1参数个数可变的子程序参数传递规则参数个数可变的子程序参数传递规则n对于参数个数可变的子程序,当参数个数不对于参数个数可变的子程序,当参数个数不超过超过4个时,可以使用寄存器个时,可以
5、使用寄存器R0R3来传递;来传递;当参数个数超过当参数个数超过4个时,还可以使用个时,还可以使用数据栈数据栈进进行参数传递。行参数传递。9TM9n参数个数固定的子程序参数传递规则参数个数固定的子程序参数传递规则n如果系统不包含浮点运算的硬件部件且没有浮点参如果系统不包含浮点运算的硬件部件且没有浮点参数时,则依次将各参数传送到寄存器数时,则依次将各参数传送到寄存器R0R3中,中,如果参数个数多于如果参数个数多于4个,将剩余的字数据通过数据个,将剩余的字数据通过数据栈来传递;栈来传递;n如果包括浮点参数则要通过相应的规则将如果包括浮点参数则要通过相应的规则将浮点参数浮点参数转换为整数参数转换为整数
6、参数,然后依次将各参数传送到寄存器,然后依次将各参数传送到寄存器R0R3中。如果参数多于中。如果参数多于4个,将剩余字数据传送个,将剩余字数据传送到数据栈中,入栈的顺序与参数顺序相反,即最后到数据栈中,入栈的顺序与参数顺序相反,即最后一个字数据先入栈。一个字数据先入栈。10TM10n如果如果系统包含浮点运算的硬件部件系统包含浮点运算的硬件部件,将按照,将按照如下规则传递:如下规则传递:n各个浮点参数按顺序处理各个浮点参数按顺序处理n为每个浮点参数分配寄存器。分配方法是:找到为每个浮点参数分配寄存器。分配方法是:找到编号最小的满足该浮点参数需要的一组连续的编号最小的满足该浮点参数需要的一组连续的
7、FP寄存器寄存器进行参数传递。进行参数传递。11TM11n子程序结果返回规则子程序结果返回规则n(1)结果为一个)结果为一个32位的整数时,通过寄存器位的整数时,通过寄存器R0返回;结果返回;结果为一个为一个64位整数时,通过寄存器位整数时,通过寄存器R0,R1返回。返回。n(2)结果为一个浮点数时,可以通过浮点运算部件的寄存)结果为一个浮点数时,可以通过浮点运算部件的寄存器器F0、D0或者或者S0来返回;结果为复合型的浮点数(如复数)来返回;结果为复合型的浮点数(如复数)时,可以通过寄存器时,可以通过寄存器F0Fn或者或者0n来返回。来返回。n(3)对于位数更多的结果,需要通过内存来传递。)
8、对于位数更多的结果,需要通过内存来传递。12TM1286 ARM汇编语言与嵌入式汇编语言与嵌入式C混合编程混合编程n在嵌入式程序设计中,有些场合(如对具体的在嵌入式程序设计中,有些场合(如对具体的硬件资源进行访问)必须用汇编语言来实现,硬件资源进行访问)必须用汇编语言来实现,可以采用在嵌入式可以采用在嵌入式C语言程序中嵌入汇编语言语言程序中嵌入汇编语言或嵌入式或嵌入式C语言调用汇编语言来实现。语言调用汇编语言来实现。n不要把内嵌汇编和汇编器不要把内嵌汇编和汇编器ARMASM或者或者GAS混淆。混淆。内嵌汇编是内嵌汇编是C编译器的一部分编译器的一部分。13TM138.61 内嵌汇编内嵌汇编n(1
9、)ARM开发工具编译环境下内嵌汇编语法格式开发工具编译环境下内嵌汇编语法格式14TM14ARM开发工具编译环境下实例开发工具编译环境下实例15TM15n(2)GNU ARM环境下内嵌汇编语法格式环境下内嵌汇编语法格式16TM16GNU ARM环境下实例环境下实例17TM17内嵌汇编的局限性内嵌汇编的局限性nARM开发工具编译环境下内嵌汇编语言,指令操作开发工具编译环境下内嵌汇编语言,指令操作数可以是寄存器、常量或数可以是寄存器、常量或C语言表达式。可以是语言表达式。可以是char、short或或int类型,而且是作为无符号数进行类型,而且是作为无符号数进行操作。操作。n当表达式过于复杂时需要使
10、用较多的物理寄存器,当表达式过于复杂时需要使用较多的物理寄存器,有可能产生冲突。有可能产生冲突。nGNU ARM编译环境下内嵌汇编语言编译环境下内嵌汇编语言ARM开发工具开发工具稍有差别,不能稍有差别,不能直接引用直接引用C语言中的变量语言中的变量。18TM18内嵌汇编的局限性内嵌汇编的局限性n(2)物理寄存器)物理寄存器n不要直接向程序计数器不要直接向程序计数器PC赋值,程序的跳转赋值,程序的跳转只能只能通过通过B或或BL指令指令实现。实现。n一般将寄存器一般将寄存器R0R3、R12及及R14用于子程序调用于子程序调用存放中间结果,因此在内嵌汇编指令中,一般用存放中间结果,因此在内嵌汇编指令
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第四讲 ARM汇编语言与嵌入式C混合编程2 第四 ARM 汇编语言 嵌入式 混合 编程
限制150内