微嵌实验1实验报告.docx
- 文档编号:11460922
- 上传时间:2023-03-01
- 格式:DOCX
- 页数:16
- 大小:1.14MB
微嵌实验1实验报告.docx
《微嵌实验1实验报告.docx》由会员分享,可在线阅读,更多相关《微嵌实验1实验报告.docx(16页珍藏版)》请在冰豆网上搜索。
微嵌实验1实验报告
微嵌实验1-实验报告
电子科技大学
实验报告
课程名称微处理器系统结构与嵌入式系统设计
实验名称ARM汇编基础实验
任课教师
实验教师
姓名
学号
实验地点
分组号
时间
年
月
日
一、实验目的
1.熟悉并掌握常用ARM汇编指令
2.熟悉并掌握“C+汇编”混合编程技术
3.熟练使用ARM软件开发调试工具Keil
二、实验内容
1.学习使用Keil开发工具
2.实现累加运算功能(汇编编程,必做)
3.实现字符串拷贝功能(C+汇编,必做)
4.实现求和运算功能(C+汇编,必做)
5.实现冒泡排序算法(汇编编程,选做)
1.判断N是否为0或者,改变标志位C
2.将R0,R1分别初始化为0与1
3.将R0+R1赋值给R0
4.判断是否溢出与R1是否大于等于R2=N,改变标志位N
5.令R1+1赋值给R1
6.通过B语句返回SUN_L1函数,实现循环相加
7.此时判断到R1大于等于R2=100,改变标志位
8.跳转到SUM_END函数,并将R0的结果保存在R8中
9.出栈并返回函数,完成1到N=100的累加,结果保存在R8中
实验1.2:
C调用汇编实现字符串拷贝功能(必做)
在testfile.s文件中,添加如下核心代码:
-------------------------------------------------------------------------------------------------------------------------
Strcopy
LDRBR2,[R1],#1;R1对应源字符串首地址,利用寄存器间接寻址读取字符串到R2
STRBR2,[R0],#1;R0对应目的字符串首地址,利用寄存器间接寻址保存字符
CMPR2,#0
BNEstrcopy
MOVPC,LR
END;文件结束
调试过程
1.定义源字符串数组“aaaa”
2.定义目标字符串“bbbb”
3.进入汇编程序strcopy
4.将源字符串的首地址R1赋值给R2,并让R1加一位,指示源字符串下一位的地址
5.将R2地址代表的字符赋值给目标字符串组首地址R0的内容,并将R0加一位,指示目标字符串的下一位地址
6.判断R2即源字符串地址内容是否为0,即是否复制完毕,并改变标志位
7.判断标志位是否复制完毕,未复制完毕,继续返回函数循环
8.复制完四次后改变标志位
9.R2=0表示已复制完毕,返回主函数,可见已将源字符串复制到目标字符串中
实验1.3:
汇编调用C实现实现求和1+2+...+N(必做)
在testfile2.s文件中,添加如下核心代码:
通过调用C函数g()实现1+2+3+glovbl,结果存在R8中。
-------------------------------------------------------------------------------------------------------------------------
MOVR0,#1;R0赋值为1
MOVR1,#2;R1赋值为2
MOVR2,#3;R2赋值为3
MOVR3,#10;R3赋值为10
BLg;调用C语言中的函数g()
MOVR8,R0;将结果存在R8中
BSTART
-------------------------------------------------------------------------------------------------------------------------
调试过程:
1.将R0赋值为1
2.将R1赋值为2
3.将R2赋值为3
4.将R3赋值为10
5.通过BL指令调用C程序g
6.执行C程序中的a+b+c+d,并将结果赋值给R0
7.C程序执行完,回到主程序,并将R0的值赋值给R8
1)在实验1中,通过伪指令EQU,定义N的值。
编译运行后,通过跟踪、调试,实现了对1+2+…n的累加运算。
2)在实验二中,编译运行后,经过跟踪调试,实现在C语言中调用函数strcopy.
3)在实验中,编译运行后,经过跟踪调试,实现了在汇编语言中调用C语言中的全局变量和全局函数。
微处理器系统结构与嵌入式系统设计实验报告
六、实验总结
在本次实验中,通过汇编程序直接对ARM处理器中的寄存器进行操作,掌握了汇编程序设计的基础知识。
更全面、更深入地理解了ASM处理器的工作原理,为基于ARM处理器的嵌入式硬件开发奠定良好的基础。
在嵌入式软件开发过程中,通常会使用ARM汇编语言和C语言在内的多种语言,通过本次实验,初步认识了ARM汇编语言与高级程序设计语言混合编程的原理和基本方法。
七、实验思考题
1.ADD替换成ADDS,SUB替换成SUBS有什么影响?
答:
ADD指令与ADDS指令的区别在于,ADDS指令运算过程中是带进位的,运算过程中将会根据结果来更新N、Z、C和V标记位,所以如果计算过程中需要进位,则二者不可交换,若不涉及进位,则无影响。
SUB与SUBS类似,是用来做减法计算的。
2.MOV替换成MOVNE有什么影响?
答:
MOV是单纯的传送指令,而MOVNE需要先判断条件NE,即要上一步计算结果不相等才执行。
3.STMIA换成STMIB,STMIA换成STMDA有什么区别?
答:
STMIA指令完成操作后地址递增,而STMIB是指令完成前递增。
STMIA指令是完成后地址递增,STMDA指令完成操作而后地址递减。
4.思考用ARM汇编实现1+3+5+…+(2n+1)或者2+4+6+…+2n。
答:
奇数求和:
设置初始值R0=0,R1=1,令R0=R0+R1,判断是否溢出,若是,结束程序,若否再判断R1是否大于等于2n+1,若是,结束程序,若否则令R1=R1+2,再回到程序开始出执行。
偶数求和:
只需要令初始R0=0,R1=2即可.
5.实验3中如果去除汇编代码中的“EXPORTstrcopy”会有什么现象,为什么?
答:
编译无法通过,如果去除则C语言程序无法调用strcopy函数,EXPORT伪指令用于在程序中声明一个全局的标号,让该标号可以在其他的文件中被引用。
6.实验4中如果去除汇编代码中的“IMPORT…..”会有什么现象,为什么?
答:
如果去除则汇编语言程序无法调用C语言的main函数,IMPORT伪指令用于通知编译器要使用的标号或变量在其他的源文件中定义了。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 报告