嵌入式系统实践上机实践报告--Thumb汇编指令和ARM工作模式

上传人:liy****000 文档编号:373310973 上传时间:2023-12-15 格式:DOC 页数:7 大小:115KB
返回 下载 相关 举报
嵌入式系统实践上机实践报告--Thumb汇编指令和ARM工作模式_第1页
第1页 / 共7页
嵌入式系统实践上机实践报告--Thumb汇编指令和ARM工作模式_第2页
第2页 / 共7页
嵌入式系统实践上机实践报告--Thumb汇编指令和ARM工作模式_第3页
第3页 / 共7页
嵌入式系统实践上机实践报告--Thumb汇编指令和ARM工作模式_第4页
第4页 / 共7页
嵌入式系统实践上机实践报告--Thumb汇编指令和ARM工作模式_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《嵌入式系统实践上机实践报告--Thumb汇编指令和ARM工作模式》由会员分享,可在线阅读,更多相关《嵌入式系统实践上机实践报告--Thumb汇编指令和ARM工作模式(7页珍藏版)》请在金锄头文库上搜索。

1、华东师范大学计算机科学技术系实验报告计算机科学技术系上机实践报告课程名称:嵌入式系统实践年级:上机实践成绩:指导教师:姓名:创新实践成绩:上机实践名称:Thumb汇编指令和ARM工作模式学号:上机实践日期:上机实践编号:组号:1上机实践时间:2学时一、 实验目的1. 掌握ARM处理器的Thumb指令使用方法;2. 学会使用msr/mrs指令实现ARM处理器工作模式的切换;3. 掌握ld中如何使用命令行指定代码段起始地址;二、 实验设备1. 硬件:Embest EDUKIT-III pc机2. 软件:Embest IDE for ARM三、 实验内容1. 使用THUMB 汇编语言,完成基本reg

2、/mem 访问,以及简单的算术/逻辑运算。2. 使用THUMB 汇编语言,完成较为复杂的程序分支,push/pop,领会立即数大小的限制,并体会ARM 与THUMB 的区别。3. 编写程序从ARM状态切换到Thumb,在ARM状态下把R2赋值为0x12345678,在Thumb状态下把R2赋值为0x87654321,分别观察两个状态下的CPSR、SPSR的值和各个标志位。4. 通过ARM汇编指令,在各种处理器模式下切换并观察各种模式下寄存器的区别;掌握ARM不同模式的进入与推出。四、 实验原理1. ARM 处理器工作状态ARM 处理器共有两种工作状态:􀁺 ARM:32 位,这

3、种状态下执行字对准的ARM 指令;􀁺 Thumb:16 位,这种状态下执行半字对准的Thumb 指令在 Thumb 状态下,程序计数器PC 使用位1 选择另一个半字。注意: ARM 和Thumb 之间状态的切换不影响处理器的模式或寄存器的内容。ARM 处理器在两种工作状态之间可以切换。1) 进入Thumb 状态。当操作数寄存器的状态位0 为1 时,执行BX 指令进入Thumb 状态。如果处理器在Thumb 状态进入异常,则当异常处理(IRQ,FIQ,Undef,Abort 和SWI)返回时,自动切换到Thumb 状态。2) 进入ARM 状态。当操作数寄存器的状态位0 为0 时

4、,执行BX 指令进入ARM 状态。处理器进行异常处理(IRQ,FIQ,Undef,Abort 和SWI)。在此情况下,把PC 放入异常模式链接寄存器中。从异常向量地址开始执行也可以进入ARM 状态。2 Thumb 状态的寄存器集Thumb 状态下的寄存器集是ARM 状态下寄存器集的子集。程序员可以直接访问8 个通用的寄存器(R0R7),PC,SP,LR 和CPSP。每一种特权模式都有一组SP,LR 和SPSR。􀁺 Thumb 状态的R0R7 与ARM 状态的R0R7 是一致的。􀁺 Thumb 状态的CPSR 和SPSR 与ARM 状态的CPSR 和SPSR

5、是一致的。􀁺 Thumb 状态的SP 映射到ARM 状态的R13。􀁺 Thumb 状态的LR 映射到ARM 状态的R14。􀁺 Thumb 状态的PC 映射到ARM 状态的PC(R15)。Thumb 寄存器与ARM 寄存器的关系如图3-7 所示。 图 3-7 寄存器状态图3 本实验涉及到的as 伪操作.code 16|32code 伪操作用于选择当前汇编指令的指令集。参数16 选择Thumb 指令集,参数32 选择ARM指令集。语法格式.code 16|32.thumb同 .code 16。.arm同 .code 32。.align对齐方式:

6、通过添加填充字节使当前位置满足一定的对齐方式。语法格式.align alignment , fill , max其中alignment 用于指定对齐方式,可能的取值为2 的次幂,缺省为4。ARM7 基础实验教程fill 是填充内容,缺省用0 填充。max 是填充字节数最大值,如果填充字节超过max,就不进行对齐。示例.align4. ARM 处理器模式除用户模式外的其他模式称为特权模式。它们可以自由的访问系统资源和改变模式。其中的5 种称为异常模式,即􀁺 FIQ(Fast Interrupt request);􀁺 IRQ(Interrupt ReQuest)

7、;􀁺 管理(Supervisor);􀁺 中止(Abort) ;􀁺 未定义(Undefined) 。当特定的异常出现时,进入相应的模式。每种模式都有某些附加的寄存器,以避免异常出现时用户模式的状态不可靠。剩下的模式是系统模式。仅ARM 体系结构V4 以及以上的版本有该模式。不能由于任何异常而进入该模式。它与用户模式有完全相同的寄存器,然而它是特权模式,不受用户模式的限制。它供需要访问系统资源的操作系统任务使用,但希望避免使用与异常模式有关的附加寄存器。避免使用附加寄存器保证了当任何异常出现时,都不会使任务的状态不可靠。5. 程序状态寄存器前一

8、节提到的程序状态寄存器CPSR 和SPSR 包含了条件码标志,中断禁止位,当前处理器模式以及其他状态和控制信息。每种异常模式都有一个程序状态保存寄存器SPSR。当异常出现时,SPSR用于保留CPSR 的状态。CPSR 和SPSR 的格式如下:1) 条件码标志:N,Z,C,V 大多数指令可以检测这些条件码标志以决定程序指令如何执行2) 控制位:最低 8 位 I,F,T 和M 位用作控制位。当异常出现时改变控制位。当处理器在特权模式下也可以由软件改变。􀁺 中断禁止位:I 置1 则禁止IRQ 中断;F 置1 则禁止FIQ 中断。􀁺 T 位:T=0 指示ARM 执行

9、;T=1 指示Thumb 执行。在这些体系结构的系统中,可自由的使用能在ARM 和Thumb 状态之间切换的指令。􀁺 模式位:M0, M1, M2, M3 和M4 (M4:0) 是模式位.这些位决定处理器的工作模式。3) 其他位程序状态寄存器的其他位保留,用作以后的扩展。6. 本实验涉及到的ld 命令行参数-Ttext org使用org 作为输出文件的text 段的起始地址。Org 必须是一个十六进制的数。五、 实验步骤1. 实验A1) 参考3.1.5 小节实验实验A 步骤1 建立一个新的工程,命名为ThumbCode;2) 参考3.1.5 小节实验实验A 步骤2 和实验参考

10、程序编辑输入源代码,编辑完毕后,保存文件为ThumbCode.s;3) 选择Project 菜单中Add To Project Files 命令,或单击工程管理窗口中的相应右键菜单命令,弹出文件选择对话框,在工程目录下选择刚才建立的源文件ThumbCode.s;4) 参考3.1.5 小节实验A 的步骤4 进行相应设置;5) 参考3.1.5 小节实验A 的步骤5 生成目标代码;6) 参考3.1.5 小节实验A 的步骤6 进行相应的设置,需要注意的是:Debug 设置对话框Symbol file 设置应该修改为和工程名对应的ThumbCode.elf;7) 选择Debug 菜单Remote Con

11、nect 进行连接软件仿真器,执行Download 命令下载程序,并打开寄存器窗口;8) 记录代码执行区中每条指令的地址,注意指令最后尾数的区别;9) 注意观察寄存器R0 和R1 的值的变化;10) 结合实验内容和相关资料,观察程序运行,通过实验加深理解ARM 指令和Thumb 指令的不同;11) 理解和掌握实验后,完成实验练习题。2. 实验B1) 在工作区窗口工作区右键菜单,点击“Add New Project to Workspace”;参考实验A的和实验参考程序,建立工程ThumbCode2;2) 参照实验A 的步骤完成目标代码的生成与调试;注意并记录ARM 指令下和Thumb 指令状态

12、下stmfd,ldmfd,ldmia 和stmia 指令执行的结果,指令的空间地址数值,数据存储的空间大小等等3) 理解和掌握实验后,完成实验练习题。3. 实验C1) 参考3.1.5 小节实验A 的步骤1 建立一个新的工程,命名为ARMMode;2) 参考3.1.5 小节实验A 的步骤2 和实验参考程序编辑输入源代码,编辑完毕后,保存文件为ARMMode.s;3) 选择ProjectAdd To Project tFiles 命令,或单击工程管理窗口中的相应右键菜单命令,弹出文件选择对话框,在工程目录下选择刚才建立的源文件ARMMode.s;4) 参考3.1.5 小节实验A 的步骤4 进行相应

13、设置。5) 参考3.1.5 小节实验A 的步骤5 生成目标代码;6) 在Download address 框内,输入下载地址应该与链接器设置中,指定的代码段起始地址相同,以保证程序能够正常执行;7) 选择Debug Remote Connect 连接软件仿真器,执行Download 命令下载程序,并打开寄存器窗口;8) 单步执行,观察并记录寄存器R0 和CPSR 的值的变化和每次变化后执行寄存器赋值后的36 个寄存器的值的变化情况,尤其注意各个模式下R13 和R14 的值;9) 结合实验内容和相关资料,观察程序运行,通过实验加深理解ARM 各种状态下寄存器的使用;10) 理解和掌握实验后,完成

14、实验练习题。六、 调试过程、结果和分析1. 本次上机的内容是Thumb汇编指令以及Arm的工作模式,在题目一Thumb状态转换以及调用子程序中,我通过观察寄存器r0,r1的值来进行理解,在子程序doadd中我们使用add指令对r0和r1进行相加,在Tstart中调用doadd使得r0的值发生变化(由10变为13)。2. 实验二比较复杂,其中涉及了多个子程序的调用。为了调试实验的结果,观察src中的值是否覆盖了dst中的值,我使用单步运行程序,然后分别观察内存中r0和r1所指向地址的值的变化(其中r0是src所在的地址,r1是dst所在的地址),调试过程中我发现程序是一次复制4个数,本次题目中数

15、字总数是20,刚好能被4整除,但是程序中也有对总数不能被4整除的处理。3. 对于实验三中的问题,起初我本来是想用mov指令直接去把数字复制到r2中,可是在调试的过程中发现了溢出的错误,后来在同学的帮助下发现Thumb指令不能直接复制0x12345678这样大的数字。然后,我就使用了ldr指令去完成了改任务。七、 总结1. 本次实验基本达到了预习所没解决的问题。问题如下:1.src所对应的地址在预习时一直不知道是多少,上机后才发现原来这是电脑根据当时随机分配的。2对于压栈和弹栈也有了更加深刻的理解。总之,实验的目的基本都达到了,如对Thumb指令的使用以及Arm处理工作模式的基本有了一个了解2. 对于本次上机的总体感觉基本满意,达到了所预期的目标。尤其是对于Thumb指令的理解更加深刻,真正做到了把老师上课所讲的理论知识具体化。八、 附件1. .global _start.text_start:.armheader:adr r0, Tstart + 1 bx r0 nop.thumbTstart:mov r0, #10mov r1, #3bl doadd stop:b stopdoadd:a

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 实验设计

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号