资源描述:
《arm实验arm汇编和c语言混合编程》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、成绩辽宁工程技术大学上机实验报告课程名称汇编语言程序设计——基于ARM体系结构实验题目ARM汇编和C语言混合编程院系软件学院专业软件工程班级姓名学号实验日期实验目的1.掌握汇编程序访问C程序变量的方法。2.掌握汇编程序调用C程序的方法。3.了解C程序调用汇编程序的方法。实验准备硬件:PC机软件:ADS1.2集成开发环境实验进度本次共有2个练习,完成2个。实验内容1.建立一个新工程。2.选择CPU。3.添加启动代码。4.选择开发工具。5.建立汇编程序源文件。6.建立分散加载文件和调试脚本文件。7.将程序源文件添加到工程中。8.设置编译链接控制选项。9.编译链接
2、工程。10.调试工程。实验步骤:7实验内容续1.ARM汇编程序访问C变量(1)ADS1.2集成开发环境,建立工程test,编辑汇编源程序文件test1.s,和test2.o,将源程序文件添加到工程项目中。建立汇编程序访问所需的C源程序。(2)编译并链接程序,使用寄存器观察器和内存观察器,运用单步执行方式调试程序test1.s和test2.o,验证ARM汇编程序对C语言变量的访问。2.汇编程序调用C程序要求汇编程序通过BLg调用C语言程序中的函数以实现5个数相减,其参数通过R0、R1、R2、R3和堆栈来传递。(1)汇编程序调用C程序的程序清单test3.s和t
3、est4.c。建立工程work,然后建立汇编程序test3.s及其调用程序test4.c,加入工程,重新编译并链接程序,使用寄存器观察器和内存观察器,运用单步执行方式调试程序,验证ARM汇编程序对C语言程序的调用。调试时使用step方式,注意观察寄存器的变化,执行到BLg指令时可通过stepin方式,单步进入C语言程序。然后通过单步执行实现5个数相减,调用函数运行完毕后程序又回到汇编语言程序。整个调试过程演示了汇编语言程序调用C语言程序的过程。3.C程序调用ARM汇编程序要求使C语言程序test6.c实现将源字符串srcstr复制到目标字符串dststr中,
4、其中字符串复制函数strcopy由汇编程序实现,该段汇编程序在test5.s中。7实验分析1.ARM汇编程序访问C变量程序代码:test1.spreserve8areareset,code,readonlyentrycode32exportarmcodeimportglobvararmcodeldrr1,=globvarldrr0,[r1]addr0,r0,#2strr0,[r1]movpc,lrendtest2.c#includeintglobvar=3;int_main(){return(0);}实验截图:7实验分析续分析:在0x801
5、8的位置上实现了3+2。2.汇编程序调用C程序程序代码:test3.sareareset,code,readonlyentrycode32exportreset;arm_addimportgldrsp,=0x31000100strlr,[sp,#-4]!movr0,#20movr1,#1movr2,#2movr3,#3movr4,#4strr4,[sp,#-4]!blgaddsp,sp,#4ldrpc,[sp],#4endtest4.c#includeintg(inta,intb,intc,intd,inte){returna-b-c-d-
6、e;}7实验分析续运行结果截图:实验分析:在ARM汇编语言程序中,将5个数分别存入寄存器中,然后通过调用C语言程序,进行相减,最后将结果存到R0中。3.C程序调用ARM汇编程序程序代码:test5.sareaSCopy,code,readonlyentryexportstrcopystrcopyldrbr2,[r1],#1strbr2,[r0],#1cmpr2,#0bnestrcopymovpc,lrendtest6.c#includeexternvoidstrcopy(char*d,constchar*s);intmain(void){c
7、onstchar*srcstr="Firststring-souce";chardststr[]="Secondstring-destination";printf("Beforecopying:");printf("%s%s",srcstr,dststr);strcopy(dststr,srcstr);7实验分析续printf("Aftercopying:");printf("%s%s",srcstr,dststr);return(0);}运行截图:由于自己的疏忽,截完图之后,没有保存到优盘,但是程序一定能运行,而且结果也能出来。运
8、行时,将ARMLinker中Imageentrypo