arm实验报告最终版要点.docx

上传人:b****1 文档编号:13612960 上传时间:2023-06-15 格式:DOCX 页数:16 大小:1.03MB
下载 相关 举报
arm实验报告最终版要点.docx_第1页
第1页 / 共16页
arm实验报告最终版要点.docx_第2页
第2页 / 共16页
arm实验报告最终版要点.docx_第3页
第3页 / 共16页
arm实验报告最终版要点.docx_第4页
第4页 / 共16页
arm实验报告最终版要点.docx_第5页
第5页 / 共16页
arm实验报告最终版要点.docx_第6页
第6页 / 共16页
arm实验报告最终版要点.docx_第7页
第7页 / 共16页
arm实验报告最终版要点.docx_第8页
第8页 / 共16页
arm实验报告最终版要点.docx_第9页
第9页 / 共16页
arm实验报告最终版要点.docx_第10页
第10页 / 共16页
arm实验报告最终版要点.docx_第11页
第11页 / 共16页
arm实验报告最终版要点.docx_第12页
第12页 / 共16页
arm实验报告最终版要点.docx_第13页
第13页 / 共16页
arm实验报告最终版要点.docx_第14页
第14页 / 共16页
arm实验报告最终版要点.docx_第15页
第15页 / 共16页
arm实验报告最终版要点.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

arm实验报告最终版要点.docx

《arm实验报告最终版要点.docx》由会员分享,可在线阅读,更多相关《arm实验报告最终版要点.docx(16页珍藏版)》请在冰点文库上搜索。

arm实验报告最终版要点.docx

arm实验报告最终版要点

 

ARM与嵌入式技术

实验报告

 

专业班级:

10通信工程1班

姓名:

万洁

学号:

100103011125

实验日期:

2013年5月28日

指导老师:

郑汉麟

 

一.实验目的

1、通过实验掌握ARM指令的特点和寻址方式;

2、掌握简单的ARM汇编语言的程序设计;

3、了解集成开发环境EmbestIDE及其开发软件的应用;

2、实验环境

EmbestIDE应用于嵌入式软件开发的新一代图形化的集成开发环境,它包括一套完备的面向嵌入式系统的开发和调试工具。

其开发软件EmbestIDEforARM是集编辑器、编译器、调试器、工程管理器(projectmanager)于一体的高度集成的窗口环境,用户可以在EmbestIDE集成开发环境中创建工程、编辑文件、编译、链接、运行,以及调试嵌入式应用程序。

3、实验步骤

1)新建工程:

运行EmbestIDE集成开发环境,选择菜单项File→NewWorkspace,如图一,系统弹出一个对话框,键入文件名“wj”,如图二,点击OK按钮。

将创建一个新工程,并同时创建一个与工程名相同的工作区。

此时在工作区窗口将打开该工作区和工程.。

(老师提醒:

不要放入Bin文件夹中)

图一图二

2)建立源文件:

点击菜单项File→New,如图三,系统弹出一个新的文本编辑窗,输入源文件代码。

编辑完后,保存文件“wj.s”后缀,如图三,四。

图三图四

3)添加源文件:

选择菜单项Project→AddToProject→Files,在工程目录下选择刚才建立的源文件.s后缀文件,如图五,图六,图七。

图五图六

图七

4)基本配置:

选择菜单项Project→Settings,弹出工程设置对话框。

在工程设置对话框中。

1选择Processor设置对话框,按照图八所示,进行配置:

图八

2选择Remote设置对话框,按照下图九所示,进行配置:

图九

3选择

最右边一个进行编译,显示如图十,则编译成功。

图十

4选择Project→Settings→Debug设置对话框,按图十一,十二,十三所示,进行配置:

图十一

图十二

图十三

5选择

最右边一个进行编译,显示如图十四,则编译成功。

5)选择菜单项Debug→RemoteConnect进行连接软件仿真器,将存储器地址改为0x1000,如图十五,执行Debug→Download命令下载程序,并打开寄存器窗口。

打开memory窗口,按F10进行单步跟踪,观察寄存器的数据变化并分析。

 

按照老师所说的,将源程序的addr0,r0,r1中的add改为adds,并设置R0,R1分别为0xffffff88和0x000000aa再次观察,得到如下结果:

图十五

 

4、实验内容:

1.(原题目第二题)编写程序将R2的高8位传送到R3的低8位(不考虑R3的其他位)

源程序:

.global_start

.text

_start:

movr2,#0x66000000/*把第一个立即数送进r2*/

movr3,#0x88000000/*把第二个立即数送进r3*/

andr0,r2,#0xff000000/*取r2高8位到r0*/

andr3,r3,#0xffffff00/*r3低8位清零*/

orrr3,r3,r0,lsr#24/*r0逻辑右移24位后与r3相或,结果送进r3*/

stop:

bstop

.end

调试结果:

1Download下载:

2取r2高8位到r0:

3r3低8位清零:

4r0逻辑右移24位后与r3相或,结果送进r3:

2.(原题目第三题)编程实现64位的加法运算,要求【R1:

R0】+【R3:

R2】结果放回【R1:

R0】。

.global_start

.text

_start:

movR0,#24/*R0=24*/

movR1,#12/*R1=12*/

movR2,#16/*R2=16*/

movR3,#18/*R3=18*/

ADDSR0,R0,R2/*R0等于低32位相加,并影响标志位*/

ADCR1,R1,R3/*R1等于高32位相加,并加上低位进位*/

stop:

bstop

.end

1.Download下载:

1单步跟踪后的结果:

2存储器的结果显示:

③寄存器的结果显示:

R0←RO+R2;R1←R1+R3:

3.(原题目第七题)编写一段程序计算10!

.global_start

.text

.equnum,10

_start:

movr0,#num

movr1,r0

s1:

subsr1,r1,#1/*把r1-1放入r1*/

mulr0,r1,r0/*r0*r1放入r0*/

cmpr1,#1/*比较R1与1的大小*/

beqstop

bnes1

stop:

bstop

.end

分析调试:

1第一次执行S1,r1=10-1=9,10*9=90,换成16进制是5a。

2第二次执行S1,r1=9-1=8,10*9*8=720,换成16进制是2d0。

③依次执行S1,到r1=1,停止,10*9*8……*1=3628800,换成16进制是375f00。

4.(原题目第八题)串拷贝(R0指向源数据的首地址,R1指向目的数据串的首地址)

.global_start

.text

.EQUNUM,8

_start:

LDRR0,=srcstr/*指向源数据串R0*/

LDRR1,=dststr/*指向目标数据串R1*/

movR3,#NUM/*R3=8*/

movLR,PC/*返回*/

Bstrcopy/*调用串拷贝子程序*/

stop:

bstop

strcopy:

/*字符串的复制*/

LDRBR2,[R0],#1/*装载字节同时更新地址*/

STRBR2,[R1],#1/*存储字节同时更新地址*/

SUBSR3,R3,#1

CMPR3,#0/*判断是否结束*/

BNEstrcopy/*不是,则继续*/

MOVPC,LR/*返回*/

.data

srcstr:

.long1,2,3,4,5,6,7,8/*定义源数据串*/

dststr:

.long8,7,6,5,4,3,2,1/*定义目的字符串*/

分析调试:

1单步跟踪后的结果及存储器的结果显示:

2.存储器结果显示

寄存器的结果显示:

5、实验体会心得:

这是第一次接触ARM与嵌入式实验,在此次实验过程里,我发现实验课比理论学习课有趣得多,因为老师一边讲解怎么使用软件,一边询问我们相关知识点,不仅使我们记得模糊的理论知识变更加清晰确切了,而且也在对软件的学习实践中,增加了浓厚的兴趣,真正实现了手把手教的详细教学。

认真听老师讲,积极主动去思考,我发现学习起来,并没有想象中的那么难。

不懂的问题,不断去尝试调试,并请教老师,可以有很多收获。

以下是本次试验中的学习收获:

1.为何要将存储器地址改为0x1000,而不是从0x0000开始(这是老师问到我的问题)

2.00系列可以存放程序的范围,分为四个空间内部程序存储器地址范围0000H-0FFFH共4KB,外部程序存储器0FFFH-0FFFFH共64KB;内部数据存储器00H-FFH共256个字节(其中包括低128字节和特殊功能寄存器SFR128个字节),外部数据存储器可扩展至64KB。

由于异常向量放在0~64字节中,系统要用到,所以为了避免冲突,选用从0x1000开始的地址,即从4K开始的地址。

2.littleEndian/BigEndain

littleEndian就是低位字节排放在内存的低端,高位字节排放在内存的高端。

而BigEndain正好相反。

3.Add/Adds的区别

Add是不影响标志位的加法算数运算指令,即操作结果不更新CPSR中的相应条件标识位;而Adds是影响标志位加法算数运算指令,即操作结果会更新CPSR中的相应条件标识位。

4.进位和溢出是两个不同的概念

溢出标志OF和进位标志CF是两个意义不同的标志.进位标志表示无符号数运算结果是否超出范围,运算结果仍然正确;溢出标志表示有符号数运算结果是否超出范围,运算结果已经不正确。

5.程序书写中注意.global_start中间是有空格的,而不是相连的。

6.因为是单步调试的,所以要注意先连续按键F10三次,再去修改Rigester中的数据。

7.不仅可以用F10,也可以用F11进行单步调试。

8.调试过程中遇到的问题如:

@1:

于是我把程序代码改写为stop:

bstop,即写为一行,然后保存,结果如下:

 

@2.程序中偶尔还会遇到问题如下:

于是我重新建立项目文件,分类安放文件夹的位置,就慢慢改正完成好了。

@3

这是由于没有将文件添加到项目文件中引起的。

@4

而这往往是由于配置过程中过快,不细心,最后一行的Builttools忘了进行配置为GNUTOOLSFORARM引起的。

改正后结果:

@5.

这是由于没有将symbol和download文件加入导致的,一方面是由于自己的粗心,一方面也是由于对软件使用的熟练程度不够,以致于不能清晰的去做每一步,总是看着错误提示,才知道哪里错了,再去加以改正。

 

当然此次实验中的程序源文件,是在同学们的帮助下,书上,以及网络资源的查阅中慢慢写出的,历时长久,但还是很欣慰,因为感觉自己对一向生涩难懂的ARM有了些许的收获和进一步的提高。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2