ARM 工作状态切换.docx
《ARM 工作状态切换.docx》由会员分享,可在线阅读,更多相关《ARM 工作状态切换.docx(11页珍藏版)》请在冰豆网上搜索。
![ARM 工作状态切换.docx](https://file1.bdocx.com/fileroot1/2023-7/10/ee1ad129-e449-4703-bce8-294a5ce53362/ee1ad129-e449-4703-bce8-294a5ce533621.gif)
ARM工作状态切换
辽宁工程技术大学上机实验报告
成绩
课程名称
汇编语言程序设计
实验题目
工作模式和工作状态的切换
院系
软件学院
专业
软件工程
班级
姓名
学号
实验日期
实验
目的
1.掌握7种工作模式的切换方法,熟悉各种工作模式下的寄存器。
2.掌握2种工作状态的切换方法。
3.掌握工作模式和工作状态切换的程序设计方法。
实验
准备
1.实验设备:
硬件:
PC机
软件:
ADS1.2集成开发环境
2.知识准备:
书上第二、三、四章知识内容
实验
进度
本次共有2个练习,完成2个。
实验
内容
一、实验内容
1.工作模式的切换
(1)使用MSR/MRS指令切换工作模式,并初始化各工作模式下的堆栈指针。
(2)观察ARM在各种工作模式下的寄存器的区别。
(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)工作模式切换顺序为:
管理模式→IRQ模式→FIQ模式→中止模式→未定义模式→系统模式→用户模式。
用户模式→系统模式。
(3)编译并链接程序,使用寄存器观察,运用单步执行方式调试程序mode_switch.s验证工作模式的切换,观察并记录状态切换时CPSR和SP的变化。
(3)随着程序调试过程中在模式间的切换,使用寄存器观察器切换到不同的工作模式下观察SP的变化情况,说明IRQ模式下SP的设置情况。
(4)重新修改程序编译调试,在不同模式下对堆栈进行操作,使用内存观察器观察不同的工作模式下SP的位置、堆栈入栈操作后栈中数据的变化情况以及SP指针值的变化情况,说明FIQ模式下进栈操作的情况。
2.工作状态的切换
(1)启动ADS1.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.2IRQ模式
图1.3FIQ模式
图1.4ABT模式
图1.5UND模式
图1.6SYS模式
图1.7USR模式
图1.8结束
二、两种状态切换
图2.1
如图2.1,把thumbcode+1值赋给R0,R0[0]位置1,要执行thumb指令集。
图2.2跳转
图2.3进入thumb程序
图2.4将arm子程序标号赋给R0
图2.5跳转到ARM子程序
图2.6执行ARM子程序
实验
总结
通过这次实验,我学会了使用MSR/MRS指令实现ARM处理器工作模式的切换,通过实验观察到不同模式下的寄存器,加深了对CPU结构的理解,掌握工作模式和工作状态切换的程序设计方法。
教师
评语