电子科技大学微嵌实验_第1页
电子科技大学微嵌实验_第2页
电子科技大学微嵌实验_第3页
电子科技大学微嵌实验_第4页
电子科技大学微嵌实验_第5页
免费预览已结束,剩余5页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、电子科技大学实验报告修正了 MOOC和旧版答案的错误,代码使用 Keil uVision5均已调试 通过。课程名称微处理器系统构造与嵌入式系统设计实验名称ARM根底编程实验任课教师 实验教师 学号实验地点 分组号 时间 年_月 日一、 实验目的1 .熟悉并掌握常用ARM汇编指令2 .熟悉并掌握“ C+汇编混合编程技术3 .熟练使用ARM软件开发调试工具Keil实验容1 .学习使用Keil开发工具2 .使用ARM汇编语言,编程实现1+2+N累加运算功能3 .使用C调用汇编函数,实现字符串拷贝功能4 .使用汇编调用C函数,实现求和运算功能5 .使用ARM汇编语言,实现冒泡排序算法选做三、实验步骤1

2、 .实验1.1:运行Keil,建立工程文件,单步运行调试演示例 如程序,深刻理解每一条指令,观察存放器,存空间的变 化。2 .实验1.2:用汇编语言实现1+2+.+N的累加:a)建立新工程,参加实验1.2文件夹中的sumsb)用汇编补充算法核心局部,代码参考流程图如下 歹峭1.1所示。c)使用单步调试,仔细观察过程中关键存放器值的 变化。R0暂存累加和图1.1D3.实验1.3: C调用汇编实现字符串拷贝功能:a)建立新工程,参加实验1.3文件夹中的main.c和 testfile.s同一个工程下添加两个文件一起编译)。b)补充完成源代码中缺失的局部,分别实现1 .拷贝源字符串的一个字节到 R2

3、中;2 .将拷贝的字节复制到目标空间。c)运行Debug进展调试。4.实验1.4:汇编调用C实现求和1+2+.+10:a)建立新工程,参加实验1.4文件夹中的sum.c和 testfile.s同一个工程下添加两个文件一起编译)。b)补充完成源代码中缺失的局部,通过调用 c函数 g(陕现1+2+3+glovb1 ,结果存在 R8中。c)运行Debug进展调试5.实验1.5: ARM汇编实现冒泡算法:a)建立新工程,参加实验1.5文件夹中的maopao.sb)补充完成源代码中缺失的局部,实现冒泡排序功 能。c)运行Debug进展调试四、实验结果1 .实验1.2:用汇编语言实现1+2+.+N的累加核

4、心代码如下:ADD R0,R1BVS SUM_ENDCMP R1,R2BHS SUM_ENDADD R1,#1日 CurrentB SUNL1OhOOOOOOI*:RI0x00000007血0x(1000006-4的(hfOOOOOOOOxaooooooo曜OkUOOOOOOC而CMOOMMRTOxOOOOOOOCEBQk000013BAK9OmQOOOOOOCELOOxQOOOOOOCRUOxdODOOOOCfeMMOOOCB13的0h3CX3£ECMOO 000017ys仃口口虹iQnnn 淡1CTSROxOOOOOOF3SfSR1OhOOOOOOOCValut图1.2it +可

5、以看见最终结果显示在存放器 R8处,十六进制为 13BA,转换成十进制为5050,实现了累加功能。2 .实验1.3: C调用汇编实现字符串拷贝功能核心代码如下:LDRB R2,R1,#1 拷贝源字符串的一个字节STRB R2,R0,#1将拷贝的字节复制到目标空间NsmtFl 7 mainL£ > 4.FF / d.Localion/ValutQxSKWOlKType intfQTOkOOOOOIE4 'mNauta - ehmr ”0x40000450 ,rbbbb"auto - cliarUI图1.3NameLocationA/aluETypeFl V ma

6、in0x000001 B6intfQ+ s.OkMOCOOOOauto - cha r *+ /OK4COC045C 匕”auto - ciaf5图1.4可以看出拷贝前srcstr是"aaaa ,dststr是"bbbb,拷贝后 srcstr是 aaaa ,dststr是 aaaa ,实现了字符串拷贝功能。3 .实验1.4:汇编调用C实现求和1+2+.+10核心代码如下:MOV R0,#1MOV R1,#2MOV R2,#3MOV R3,#10BL gMOV R8,R0K q gist trValue4 Crren.1L- BO0x00000010RIQkUCIE阊英E2O

7、kOOOOOOOSR3xOOOOOCDXK4g 口口。口00mE5uooooooaa跪fljtoonoooooETOkOOOOWOO3明0x00000010R90x00000000E10modooocooEH0x00000000EIEkOODODOOIfil3 (SF)OxOOOODOOORI 4 (LR)ObdOOOOQOHMMRl6. Fl)OhOOOOOOIB+ CFSHOjiOOOOOOD3+ SPSH1OkOOOOOOOO图1.5可以看出最终结果显示在存放器 R8处,十六进制表示为0010,转换为十进制为0x104.实验1.5: ARM汇编实现冒泡算法代码如下:AREA Sort,C

8、ODE,READONLYENTRYstartMOV R4,#0LDR R6,=srcADD R6,R6,#lenLDR R7,=src;初始化R4作为循环计数器 inner2MOV R1,R7CMP R6,R7BLE outer;将每次循环开场,正确设置 R1的值为数组开场地址. word.zl-;如果所有数字均已排序,即 R6<=R7 输出跳转到 outer 函数innerLDR R2,R1LDR R3,R1,#4CMP R2,R3BGT exchange;判断相邻数字是否符合规律,不符合跳转到exchangel数inner1ADD R1,R1,#4CMP R1,R6BLT inner

9、ADD R4,R4,#4CMP R4,#lenBLE subtractionexchangeSTR R3,R1STR R2,R1,#4B inner1subtractionSUB R6,R6,#4B inner2outerLDR R1,=srcsrc DCD 2,4,10,8,14,1,20AREA Array,DATA,READWRITElen EQU 7*4END图1.6排序前在star函数中获得R6地址后,首先如上图,设置权限才能 正确执行程序。(MOOWXJKaxocOMO&C! CXOOSCIOTEI "M0XOM; taQ40M0« i 二工配普昵。Ek

10、 CiOOOMIMi日现口仁口口13或;2 .u二 2 2 o 口 ,o00, oMVo-clacji 1 mi fl- fly flC-口 £ -CJ-d -u Au-c.2 2口口口00claOLQ-.uD r-!0一二;1o Gd 白白o G- £ £ -C.1 口 口 o口 -Jj LJo fl lu-13一 0 fly fl-二 CJ 4. J 口口口avMV00O-C-OAddra.MOWCKC图1.7排序前QH 二 jiQZ-SOEZ: 口工的口MggMA 九 OMOCH30MC1I xDEMOJaEE : EMlMiClOlOfi! 山:Bl DO

11、 口口 DG oa do do n W M M DO M M M M 口口 Da oa do do oa oo M M M M 2 GD CD 口口 寸口 ao do 2 ao g oo q。g q 口口 心口 CD CD a d电白aS do ao 0。a。ooch 00 aa 口UD 00 03 QD00 00 g g 灯。ci (j g q q co 口口 oo ci© d£i aoM g"gOS CD CD 00 03 ” CD00 8 g SDg g g SQ0口 OQ 0 7 口口 力口 £|Q CD DD 00。0 4。00。0小00于14

12、赢;s D口 口口 口门口( nc0U 灯心 CI0 口007 07 J2:i ;3图1.8排序后地址0X0000005C-0X00000078保存的排序后的结果正确, 程序实现了冒泡法排序功能。五、实验总结1 .此次实验用汇编和C语言实现了 1N的累加、字符串的拷 贝、数字求和以及冒泡法排序这几项功能,了解了汇编语 言的根底指令及其意义,学会了使用了 Keil编译器编写和 调试程序。2 .知道了 C程序与汇编语言相互调用的规那么:存放器的使用规那么:“子程序间通过存放器 R0R3 来传递参数。如果更多参数需要传递,那么需要使用堆 栈。这也是第二题字符串复制中使用 R0和R1的原因 在“子程序

13、中,使用存放器 R4R11来保存局部变量。存放器R12用于子程序间scratch存放器(用于彳存SP,在 函数返回时使用该存放器出栈,记作IP。存放器R13用于数据栈指针,记作SR存放器SP在进入 子程序时的值和退出子程序时的值必须相等。存放器R14称为存放器,记作LR。它用于保存子程序的返 回地址。存放器R15是程序计数器,记作PC。六、实验思考题1. Q: ADD替换成ADDS, SUB替换成SUBS有什么影响? A:替换后,运算结果会影响标志存放器。因为 ADD、 SUB不带进位与借位,ADDS、SUBS带有进位与借位,运 算完成要置符号位。2. Q: MOV替换成MOVNE有什么影响?A:替换后只有在上一步比拟结果为不相等的时候才会执行 该指令。“ NE属于“cond,意义为不相等3. Q : STMIA换成STMIB, STMIA换成STMDA有什么区别 A:换成STMIB是将每次传送后地址+4变成每次传送前地 址+4,换成STMDA是将每次传送后地址+4变成每次传送 后地址-4。4. Q:思考用ARM汇编实现1+3+5+门+勤或者 2+4+6+ +2n。A:实现 1+3+5+.+(2n+1),将DD R1,#1 改为 ADD R1,#2,设置R1初始值为1。实现 2+4+6+.+2n,斗瓠DD R1,#1 改为 ADD R1,#2,设置R1初始值为2.5. Q :实

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论