




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验C和ARM汇编混合编程实验一实验目的熟悉ADS开发环境、AXD及Multi_ICE调试环境。掌握简单的ARM汇编指令的使用方法。掌握S3C2410A的I/O控制寄存器的配置。掌握ARM汇编指令和C语言相互调用的方法二实验设备PC机、ARM仿真器、2410实验箱、串口线。三实验内容熟悉ARM开发环境的建立。使用ARM汇编和C语言设置GPIO口的相应寄存器。四实验原理C程序与汇编程序相互调用规则为了使单独编译的C语言程序和汇编程序之间能够相互调用,必须为子程序间的调用规定一定的规则。ATPCS即ARM,Thumb过程调用标准(ARM/ThumbProcedureCallStandard),是ARM程序和Thumb程序中子程序调用的基本规则,它规定了一些子程序间调用的基本规则,如子程序调用过程中的寄存器的使用规则,堆栈的使用规则,参数的传递规则等。下面结合实际介绍几种ATPCS规则,如果读者想了解更多的规则,可以查看相关的书籍。基本ATPCS基本ATPCS规定了在子程序调用时的一些基本规则,包括下面3方面的内容:各寄存器的使用规则及其相应的名称。数据栈的使用规则。参数传递的规则。相对于其它类型的ATPCS,满足基本ATPCS的程序的执行速度更快,所占用的内存更少。但是它不能提供以下的支持:ARM程序和Thumb程序相互调用,数据以及代码的位置无关的支持,子程序的可重入性,数据栈检查的支持。而派生的其他几种特定的ATPCS就是在基本ATPCS的基础上再添加其他的规则而形成的。其目的就是提供上述的功能。寄存器的使用规则寄存器的使用必须满足下面的规则:子程序间通过寄存器R0〜R3来传递参数。这时,寄存器R0〜R3可以记作A0〜A3。被调用的子程序在返回前无需恢复寄存器R0〜R3的内容。在子程序中,使用寄存器R4〜Rll来保存局部变量。这时,寄存器R4〜R11可以记作V1〜V8。如果在子程序中使用到了寄存器V1〜V8中的某些寄存器,子程序进入时必须保存这些寄存器的值,在返回前必须恢复这些寄存器的值;对于子程序中没有用到的寄存器则不必进行这些操作。在Thumb程序中,通常只能使用寄存器R4〜R7来保存局部变量。寄存器R12用作子程序间scratch寄存器,记作IP。在子程序间的连接代码段中常有这种使用规则。寄存器R13用作数据栈指针,记作SP。在子程序中寄存器R13不能用作其他用途。寄存器SP在进入子程序时的值和退出子程序时的值必须相等。寄存器R14称为连接寄存器,记作LR。它用于保存子程序的返回地址。如果在子程序中保存了返回地址,寄存器R14则可以用作其他用途。寄存器R15是程序计数器,记作?^它不能用作其他用途。参数传递规则根据参数个数是否固定可以将子程序分为参数个数固定的(nonvariadic)子程序和参数个数可变的(variadic)子程序。这两种子程序的参数传递规则是不同的。参数个数可变的子程序参数传递规则对于参数个数可变的子程序,当参数不超过4个时,可以使用寄存器R0〜R3来传递参数;当参数超过4个时,还可以使用数据栈来传递参数。在参数传递时,将所有参数看作是存放在连续的内存字单元中的字数据。然后,依次将各字数据传送到寄存器R0、R1、R2、R3中,如果参数多于4个,将剩余的字数据传送到数据栈中,入栈的顺序与参数顺序相反,即最后一个字数据先入栈。按照上面的规则,一个浮点数参数可以通过寄存器传递,也可以通过数据栈传递,也可能一半通过寄存器传递,另一半通过数据栈传递。(2) 参数个数固定的子程序参数传递规则对于参数个数固定的子程序,参数传递与参数个数可变的子程序参数传递规则不同。如果系统包含浮点运算的硬件部件,浮点参数将按照下面的规则传递:各个浮点参数按顺序处理。为每个浮点参数分配FP寄存器。分配的方法是,满足该浮点参数需要的且编号最小的一组连续的FP寄存器。第一个整数参数,通过寄存器R0〜R3来传递。其他参数通过数据栈传递。(3) 子程序结果返回规则子程序中结果返回的规则如下:结果为一个32位的整数时,可以通过寄存器R0返回。结果为一个64位整数时,可以通过寄存器R0和Rl返回,依次类推。结果为一个浮点数时,可以通过浮点运算部件的寄存器f0、d0或者s0来返回。结果为复合型的浮点数(如复数)时,可以通过寄存器f0〜fN或者d0〜dN来返回。对于位数更多的结果,需要通过内存来传递。C语言函数和ARM汇编语言函数间相互调用高级语言函数与汇编语言函数的混合调用也要遵循ATPCS规则,保证程序调用时参数的正确传递。在汇编程序中使用EXPORT伪指令声明本子程序,使其它程序可以调用此子程序,而在C语言程序中使用extern关键字声明外部函数(声明要调用的汇编子程序),即可调用此汇编子程序。下面给出两个例子来介绍函数相互调用。五代码分析例C函数中调用汇编(书P174)伪随机数程序(汇编程序文件)AREARANDOM_CODE,CODE,READONLYEXPORTseedrandomnumberLDRip,SEED_ADRLDMIAip,{a1,a2}TSTa2,a2,LSR#1MOVSa3,a1,RRXADCa2,a2,a2ADCa2,a2,a2EORa3,a3,a1,LSL#12EORa1,a3,a3,LSR#20STMIAip,{a1,a2}MOVpc,lrSEED_ADRDCDseedAREARANDOM_DATA,DATAseedDCD&33333333DCD$AAAAAAAAEND伪随机数程序(C程序文件)#include<stdio.h>externunsignedintrandomnumber(void)intmain(){intloop,i;printf(“Pleaseinputthenumberofrandomnumber:");scanf("%d”,$loop);for(i=0;i<loop;i++)}Return0;}代码分析这是一个C中调用汇编的程序,在C中有main函数。数据段(data):数据段用来存放可执行文件中已初始化全局变量,换句话说就是存放程序静态分配[1]的变量和全局变量。BSS段:BSS段包含了程序中未初始化全局变量,在内存中bss段全部置零。BSS是blockstartedbysymbol的缩写。因为未初始化的变量没有对应的值,所以并不需要存储在可执行对象中。但是因为C标准强制规定未初始化的全局变量要被赋予特殊的默认值(基本上是0值),所以内核要从可执行代码装入变量(未赋值的)到内存中,然后将零页映射到该片内存上,于是这些未初始化变量就被赋予了0值。这样做避免了在目标文件中进行显式地初始化,减少空间浪费Code为程序代码部分伪指令分析本程序中EXPORTrandomnumber,EXPORTseed声明randomnumber子程序和seed子程序将被外部函数调用;在C程序的main()函数中对randomnumber和seed汇编子程序进行了调用:externunsignedintrandomnumber(void)声明randomnumber为外部函数。分步执行结果此程序汇编代码部分的分步执行结果如表4-1所示:表4-1分步执行结果执行指令a1a2a3ZCLDMIAip,{a1,a2}33333333AAAAAAAA00TSTa2,a2,LSR#133333333AAAAAAAA1MOVSa3,a1,RRX33333333AAAAAAAA199999911ADCa2,a2,a233333333555555551999999911ADCa2,a2,a233333333AAAAAAAB1999999911EORa3,a3,a1,LSL#1233333333AAAAAAAB2AAAA99911EORa1,a3,a3,LSR#202AAAAB33AAAAAAAB2AAAA99911六实验总结通过这次实验,我掌握了C和汇编混合编程,C是如何调用汇编子程序,汇编又是如何调用C程序的。另外,还掌握了参数传递规则和寄存器的使用规则,以及exter、EXPORT>CODE、DATA等伪码的使用。虽然课上老师讲解这个程序时,感觉自己已经掌握,老师要求自己运行一遍,把结果写出来时不愿意写,但算出来之后却发现错误很多,眼高于低,所以以后还要多加练习。这次实验也使我对前面所学的ARM操作指令得到了练习,真正到用时才发现自己掌握的不足,很多的操作指令都不知道是用来十什么的。这次实验我对一些常用的指令得到了练习,例如,EOR、TST、LSR、ADC等等,同时也纠正了自己原先认识上的错误,例如本实验中ADCa2,a2,a2,ADC操作并不影响a2的值,只是
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 纳米碳化物陶瓷企业ESG实践与创新战略研究报告
- 上海宠物购买合同范例
- 社交平台符合法律咨询合同
- 个人买卖软件合同样本
- 医院聘请护士合同样本
- 劳动合同范例和劳改合同
- 2024年湘西州泸溪县妇幼保健计划生育服务中心招聘笔试真题
- 2024年台州温岭市第一人民医院招聘医学卫生类笔试真题
- 购房定金合同的法律审查
- 加工钢筋合同样本
- 混凝土台阶工程施工方案
- 【八年级下册历史】单元测试 第一、二单元测试题
- 《微观经济学》试题及参考答案(三)
- 智能人行通道速、摆闸建筑施工安装布线调试方案
- 邮政金融主任竞聘
- 纺织材料创新与应用
- 防火巡查、检查和火灾隐患整改制度(2篇)
- 茶叶销售课件教学课件
- 图文转换-图表(小题训练)(解析版)-2025年部编版中考语文一轮复习
- 与数列相结合的概率综合问题-2022年高考数学二轮复习之大题专练(解析版)
- 中考数学函数一次函数复习课件
评论
0/150
提交评论