ARM汇编语言与C语言混编.docx
《ARM汇编语言与C语言混编.docx》由会员分享,可在线阅读,更多相关《ARM汇编语言与C语言混编.docx(10页珍藏版)》请在冰点文库上搜索。
![ARM汇编语言与C语言混编.docx](https://file1.bingdoc.com/fileroot1/2023-5/16/aaa17aea-6f2b-4164-8871-6c09491f108d/aaa17aea-6f2b-4164-8871-6c09491f108d1.gif)
ARM汇编语言与C语言混编
成绩
辽宁工程技术大学上机实验报告
课程名称
汇编语言程序设计
实验题目
ARM汇编和C语言混合编程
院系
软件学院
专业
软件工程
班级
姓名
学号
实验日期
实验
目的
1.掌握汇编程序访问C程序变量的方法。
2.掌握汇编程序调用C程序的方法。
3.了解C程序调用汇编程序的方法。
实验
准备
1.环境准备:
(1)硬件:
PC机。
(2)软件:
ADS1.2集成开发环境。
2.知识准备:
(1)汇编语言访问C程序。
(2)汇编语言调用C程序。
实验
进度
本次共有3个练习,完成2个。
实验
内容
实验
内容
【实验内容】
1.建立一个新工程。
2.选择CPU。
3.添加启动代码。
4.选择开发工具。
5.建立汇编程序源文件。
6.建立分散加载文件和调试脚本文件。
7.将程序源文件添加到工程中。
8.设置编译链接控制选项。
9.编译链接工程。
10.调试工程。
【实验步骤】
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和test4.c。
建立工程work,然后建立汇编程序test3.s及其调用程序test4.c,加入工程,重新编译并链接程序,使用寄存器观察器和内存观察器,运用单步执行方式调试程序,验证ARM汇编程序对C语言程序的调用。
调试时使用step方式,注意观察寄存器的变化,执行到BLg指令时可通过stepin方式,单步进入C语言程序。
然后通过单步执行实现5个数相减,调用函数运行完毕后程序又回到汇编语言程序。
整个调试过程演示了汇编语言程序调用C语言程序的过程。
3.C程序调用ARM汇编程序
要求使C语言程序test6.c实现将源字符串srcstr复制到目标字符串dststr中,其中字符串复制函数strcopy由汇编程序实现,该段汇编程序在test5.s中。
实验
分析
实验
分析
实验
分析
实验
分析
实验
分析
实验
分析
实验
分析
实验
分析
【运行结果】
1.汇编语言访问C程序变量
图1.1定义变量
如图1.1所示,汇编语言用IMPORTGLOBVAR声明了一个变量与C语言中所声明的变更globvar所对应。
将其地址读入寄存器R1中。
使用ADD语句修改寄存器R0的值,再将修改后的R0值赋给变量,修改变量的值。
图1.2读入
如图1.2所示,将变更globvar的值读入寄存器R0中。
图1.3更改
如图1.3所示,将r0中的值修改即修改变更globvar的值。
图1.4赋值
如图1.4所示,将r0的值赋予变更,修改变量的值。
图1.5改变pc
如图1.5所示,将连接寄存器值送到pc改变指针,使程序跳回。
2.汇编语言调用C程序
图2.1加载
如图2.1所示,将32位立即数加载到pc指针里,给pc赋值。
图2.2保存返回地址
如图2.2所示,使用STR语句保存返回地址到连接寄存器里。
图2.3设置参数1
如图2.3所示,使用r0寄存器存放第一个参数。
图2.4设置参数2
如图2.4所示,使用r1寄存器存放第二个参数。
图2.5设置参数3
如图2.5所示,使用r2寄存器存放第三个参数。
图2.6设置参数4
如图2.6所示,使用r3寄存器存放第四个参数。
图2.7设置参数5
如图2.7所示,第五个数利用堆栈传递。
图2.8
如图2.8所示,前四个数利用寄存器存储,调整指针将第五个数放在堆栈段里。
图2.9跳转
如图2.9所示,利用bl语句调用C程序中的g。
图2.10c程序
如图2.10所示,调到C程序执行C语言,利用add语句和ldr语句调整数据栈指针并返回。
【遇到的问题】
实验一用的是书上给的代码,有错误运行不了,问了同学然后改了一些代码,后正确。
在汇编语言调用C程序时,执行完C语言程序后没能返回到汇编程序。
在代码中注释了ldrpc,[sp],#4指令,没能使指针返回。
实验
总结
本次试验主要是加深C语言和汇编混合编程的使用,在一步一步的调试的过程中加深了解并学会使用混合编程。
加深了一些在课堂学到的ARM指令,学到了两种语言互相调用的方法。
本次实验由于实验三做的不是很顺利,一直有错误没有改过来,所以没有达到完美。
教师
评语