1、ARM 工作状态切换辽宁工程技术大学上机实验报告成绩课程名称汇编语言程序设计实验题目工作模式和工作状态的切换院系软件学院专业软件工程班级姓名学号实验日期实验目的1掌握7种工作模式的切换方法,熟悉各种工作模式下的寄存器。2掌握2种工作状态的切换方法。3掌握工作模式和工作状态切换的程序设计方法。实验准备1.实验设备:硬件:PC机软件:ADS1.2集成开发环境2.知识准备: 书上第二、三、四章知识内容实验进度本次共有 2 个练习,完成 2 个。实验内容一、实验内容1工作模式的切换(1)使用MSR/MRS指令切换工作模式,并初始化各工作模式下的堆栈指针。(2)观察ARM在各种工作模式下的寄存器的区别。
2、(3)观察并记录ARM在各种工作模式间切换时寄存器的变化情况。2工作状态的切换(1)使用BX指令完成ARM与THUMB状态的切换(2)使用BLX指令完成ARM与THUMB状态的切换3工作模式和工作状态切换实验流程(1)建立一个新工程。(2)建立一个汇编源程序,并添加到工程中。(3)编译链接工程,设置编译连接控制选项,选择在线仿真模式。(4)使用AXD进行调试。二、实验步骤1工作模式的切换(1)启动ADS1.2集成开发环境,建立工程mode,编辑汇编源程序文件为mode_switch.s,添加到工程项目中。要求初始化各模式下的堆栈指针(先定义堆栈长度和堆栈空间),并重新设置各种模式堆栈。(2)工
3、作模式切换顺序为:管理模式IRQ模式FIQ模式中止模式未定义模式系统模式用户模式。用户模式系统模式。(3)编译并链接程序,使用寄存器观察,运用单步执行方式调试程序mode_switch.s验证工作模式的切换,观察并记录状态切换时CPSR和SP的变化。(3)随着程序调试过程中在模式间的切换,使用寄存器观察器切换到不同的工作模式下观察SP的变化情况,说明IRQ模式下SP的设置情况。(4)重新修改程序编译调试,在不同模式下对堆栈进行操作,使用内存观察器观察不同的工作模式下SP的位置、堆栈入栈操作后栈中数据的变化情况以及SP指针值的变化情况,说明FIQ模式下进栈操作的情况。2工作状态的切换(1)启动A
4、DS1.2集成开发环境,建立工程arm_thumb1,编辑汇编源程序文件为status1.s,添加到工程项目中。使用BX指令完成ARM与THUMB状态的切换。(2)建立工程arm_thumb2,编辑汇编源程序文件为status2.s,添加到工程项目中。使用BLX指令完成ARM与THUMB状态的切换。(3)调试status1.s和status2.s源程序,记录状态切换时LR、PC和CPSR的变化情况。实验分析日一、七种模式转换1.编译并链接程序。使用寄存器观察器,运用单步执行方式调试程序test.s,验证工作模式切换。图1.1 初始状态2.随着程序调试过程中在各模式间的切换。图1.2 IRQ模式图1.3 FIQ模式图1.4 ABT模式图1.5 UND模式图1.6 SYS模式图1.7 USR模式图1.8 结束二、两种状态切换图2.1 如图2.1,把thumbcode+1值赋给R0,R00位置1,要执行thumb指令集。图2.2 跳转图2.3 进入thumb程序图2.4 将arm子程序标号赋给R0图2.5 跳转到ARM子程序图2.6 执行ARM子程序实验总结通过这次实验,我学会了使用MSR/MRS指令实现ARM处理器工作模式的切换,通过实验观察到不同模式下的寄存器,加深了对CPU结构的理解,掌握工作模式和工作状态切换的程序设计方法。 教师评语