arm实验二.docx
- 文档编号:27264573
- 上传时间:2023-06-28
- 格式:DOCX
- 页数:10
- 大小:1.01MB
arm实验二.docx
《arm实验二.docx》由会员分享,可在线阅读,更多相关《arm实验二.docx(10页珍藏版)》请在冰豆网上搜索。
arm实验二
成绩
辽宁工程技术大学上机实验报告
课程名称
汇编语言程序设计——基于ARM体系结构
实验题目
工作模式和工作状态的切换
院系
软件学院
专业
软件工程
班级
姓名
学号
实验日期
实验
目的
1.掌握7种工作模式的切换方法,熟悉各种工作模式下的寄存器。
2.掌握2种工作状态的切换方法。
3.掌握工作模式和工作状态切换的程序设计方法。
实验
准备
硬件:
PC机
软件:
ADS1.2集成开发环境
实验
进度
本次共有2个练习,完成2个。
实验
内容
实验
内容
续
实验
内容
续
实验
内容
续
实验
内容
续
1.工作模式的切换
(1)使用MSR/MRS指令切换工作模式,并初始化各工作模式下的堆栈指针。
(2)观察ARM在各种工作模式下的寄存器的区别。
(3)观察并记录ARM在各种工作模式间切换时寄存器的变化情况。
2.工作状态的切换
(1)使用BX指令完成ARM与THUMB状态的切换
(2)使用BLX指令完成ARM与THUMB状态的切换
实验步骤:
1.工作模式的切换
(1)启动ADS1.2集成开发环境,建立工程mode,编辑汇编源程序文件为mode_switch.s,添加到工程项目中。
要求初始化各模式下的堆栈指针(先定义堆栈长度和堆栈空间),并重新设置各种模式堆栈。
(2)工作模式切换顺序为:
管理模式→IRQ模式→FIQ模式→中止模式→未定义模式→系统模式→用户模式。
用户模式→系统模式。
(3)编译并链接程序,使用寄存器观察,运用单步执行方式调试程序mode_switch.s验证工作模式的切换,观察并记录状态切换时CPSR和SP的变化。
(4)随着程序调试过程中在模式间的切换,使用寄存器观察器切换到不同的工作模式下观察SP的变化情况,说明IRQ模式下SP的设置情况。
(5)重新修改程序编译调试,在不同模式下对堆栈进行操作,使用内存观察器观察不同的工作模式下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的变化情况。
程序代码:
工作模式的切换:
usr_stack_legthequ64
svc_stack_legthequ32
fiq_stack_legthequ16
irq_stack_legthequ64
abt_stack_legthequ16
und_stack_legthequ16
preserve8
areareset,code,readonly
entry
code32
startmovr0,#0
movr1,#1
movr2,#2
movr3,#3
movr4,#4
movr5,#5
movr6,#6
movr7,#7
movr8,#8
movr9,#9
movr10,#10
movr11,#11
movr12,#12
blinitstack
mrsr0,cpsr
bicr0,r0,#0x80
msrcpsr_cxsf,r0
msrcpsr_c,#0xd0
mrsr0,cpsr
msrcpsr_c,#0xdf
mrsr0,cpsr
haltbhalt
initstackmovr0,lr
msrcpsr_c,#0xd3
ldrsp,stacksvc
msrcpsr_c,#0xd2
ldrsp,stackirq
msrcpsr_c,#0xd1
ldrsp,stackfiq
stmfdsp!
{r0}
nop
msrcpsr_c,#0xd7
ldrsp,stackabt
msrcpsr_c,#0xdb
ldrsp,stackund
msrcpsr_c,#0xdf
ldrsp,stackusr
movpc,r0
stackusrdcduerstackspace+(usr_stack_legth-1)*4
stacksvcdcdsvcstackspace+(svc_stack_legth-1)*4
stackirqdcdirqstackspace+(irq_stack_legth-1)*4
stackfiqdcdfiqstackspace+(fiq_stack_legth-1)*4
stackabtdcdabtstackspace+(abt_stack_legth-1)*4
stackunddcdundstackspace+(und_stack_legth-1)*4
areareset,data,noinit,align=2
uerstackspacespaceusr_stack_legth*4
svcstackspacespacesvc_stack_legth*4
irqstackspacespaceirq_stack_legth*4
fiqstackspacespacefiq_stack_legth*4
abtstackspacespaceabt_stack_legth*4
undstackspacespaceund_stack_legth*4
end
BX指令完成ARM与THUMB状态的切换:
preserve8
areareset,code,readonly
entry
code32
arm1adrr0,thumb1+1
movlr,pc
bxr0
addr1,r2,#2
barm1
code16
thumb1addr1,r3,#1
addr0,r0,#08
bxlr
end
实验
分析
实验
分析
续
实验
分析
续
实验
分析
续
工作模式的切换:
1.编译并连接程序,使用寄存器观察器,运用单步执行方式调试程序mode_switch.s,验证工作模式切换。
如图
图一
图二
2.随着程序调试过程中在各模式间的切换,使用寄存器观察器切换到不同的工作模式下观察SP的变化情况。
如图
管理模式:
图三
中断模式:
图四
快速中断模式:
图五
中止模式:
图六
未定义模式:
图七
系统模式:
图八
用户模式:
图九
使用BX指令完成ARM与THUMB状态的切换:
1.编译并连接程序,使用寄存器观察器,运用单步执行方式调试程序status1.s,验证工作模式切换。
如图
图十
图十一
2.调试status1.s源程序,记录状态切换时LR、PC和CPSR的变化情况。
bx指令由arm状态转换thumb状态:
图十二
bx指令由thumb状态转换arm状态:
图十三
实验
总结
通过此次实验我学会了使用MSR/MRS指令实现ARM处理器工作模式的切换,观察不同模式下的寄存器。
在开始阶段,并不知道自己应该做什么,以至于好长时间都处在迷茫状态。
好在后来经过老师的指点,逐渐掌握了如何操作。
这次的实验也为以后ARM上机实验打下了基础,也为更进一步认识ARM微处理器,做出了铺垫。
教师
评语
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- arm 实验
![提示](https://static.bdocx.com/images/bang_tan.gif)