山东大学嵌入式实验报告-(8000字)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
山东大学嵌入式实验报告-(8000字)
嵌入式实验报告
班级:电信工x班姓名:xxx 学号:20120012xxxx
实验一、arm汇编指令实验-简单数据搬移实验
实验目的:
熟悉实验开发环境,掌握简单arm汇编的使用方法
实验内容
熟悉开发环境并使用ldr/str,mov等指令访问寄存器或存储单元;
使用ads/sub/lsl/lsr/and/orr等指令完成基本数学/逻辑运算。
实验要求
(1)按照前面叙述介绍的方法,在ads下创建一个工程asmlabl,定义两个变量x,y和堆栈地址0x1000,将变量x的内容存到堆栈顶,然后计算x+y,并将和存到堆栈的下一个单元。通
过axd查看寄存器和memory和寄存器中数据的变化。
(2)在指令后面加上适当注释,说明指令功能。
(3)指出程序执行后各相关寄存器及存储器单元的具体内容。
程序代码截图如下:
程序运行结果截图:
由实验结果可知堆栈的第二个单元中存放了x+y的值6d
练习题
编写程序实现对一段数据的最大值和最小值搜索,最大值存在于max变量之中,最小值存在于min变量之中。提示:数据的定义采用伪指令:dcd来实现。
基本思路:利用r0做基地址,将r1,r2分别放入第一单元的内容,利用r3做循环计数,利用r4遍历读取第2至最后一个数据,如果r1的数
据小于新读入的r4数据则将r4的内容存入r1,如果r2的内容大于r4的内容则将r4的内容存入r2,。遍历完成之后,r1将存放最大数据,r2将存放最小数据。
程序代码截图如下:
程序运行结果截图:
实验二 arm汇编指令实验2-字符串拷贝实验实验目的
通过实验掌握使用ldb/stb,b等指令完成较为复杂的存储区访问和程序分支,学会使用条件码。
实验内容熟悉开发环境的使用并完成一块存储区的拷贝。
完成分支程序设计,要求判断参数,根据不同参数,调用不同的子程序。
实验要求
(1)按照2.3节介绍的方法,在ads下创建一个工程asmab2,定义两个数据存储区src 和dst,src用于存放原字符串,dst用于存放目的字符串。堆栈地址0x400,将变量原字符串的内容拷贝到目的字符串中,要能判断原字符串的结束符(0),并统计字符串的个数。通过axd查看寄存器和memory和寄存器中数据的变化。(2)在指令后面加上适当注释,说明指令功能。
(3)指出程序执行完后各相关寄存器及存储器单元的具体内容。
程序代码截图如下:
程序运行结果
源字符串
字符串复制后两个数据存储区src:0x8040和dst:0x8047中的数据情况
实验三 arm汇编指令实验3-arm处理器工作模式实验实验目的
(1)通过实验掌握学会使用msr/mrs指令实现arm处理器工作模式的切换,观察不同模
式下的寄存器,加深对cpu结构的理解;(2)通过实验掌握ld中如何使用命令指定代码段起始地址。
实验内容
通过arm汇编指令,在各种处理器模式下切换并观察各种模式下寄存器的区别;掌握arm不同模式的进入与退出。
实验要求
(1)按照2.3节介绍的方法,在ads下创建一个工程asmmodelab,完成各个模式下的堆
栈初始化工作,并将r1-r12的内容存入当前模式下堆栈。通过axd运用单步执行方式调用程序,验证工作的模式,使用寄存器观察切换到不同的工作模式下观察sp(r13)的变化情况。
(2)实验过程中请记录并思考以下内容:1)程序复位之后系统处于什么模式?
2)记录每种模式下的厨师堆栈指针,以及执行r1-r12内容压栈后本模式堆栈相关内存单元的数值。并分析快速中断fiq模式与其他模式存入的r1-r12有什么不同。
3)切换成用户模式之后还能否从用户模式切换到其他模式?
4)用户模式下能否执行堆栈压栈操作?如果能的话,观察用户模式下压栈之前和之后其堆栈区域的变化情况。
5)观察本程序模式切换过程中spsr有无变化,并解释其原因。
程序运行结果截图:
6)程序复位之后系统处于什么模式?答:程序复位之后系统处于管理模式。
7)记录每种模式下的初始堆栈指针,以及执行r1-r12内容压栈后本模式堆栈相关内存单
元的数值。并分析快速中断fiq模式与其他模式存入的r1-r12有什么不同。答:(管理模式)
即管理模式的栈顶指针为
0x8240
满递减模式,r1-r12压栈后,管理模式栈顶指针为0x8210相距0x30,压入12个字
(中断模式)
观察r13,中断模式的堆栈地址为
0x8340
满递减模式,r1-r12压栈后,中断模式栈顶指针为0x8310,相距0x30,压入12个字
观察r13,快速中断模式的堆栈地址为
0x8380
满递减模式,观察运行结果发现,快速中断模式中只有r1-r7压栈了,这是因为在快速中断模式中,可访问的寄存器只有r1-r7,不能访问
r8-r12,快速中断模式下有自己的r8-r12。(中止模式)
观察r13,中止模式的堆栈地址为
0x83c0
满递减模式,r1-r12压栈后,中止模式栈顶指针为0x8310,相距0x30,压入12个字观察r13,未定义模式的堆栈地址为
0x8400
满递减模式,r1-r12压栈后,未定义模式栈顶指针为0x83d0,相距0x30,压入12个字(系统模式)
观察r13,系统模式的堆栈地址为
0x81c0