arm实验二.docx

上传人:b****3 文档编号:27264573 上传时间:2023-06-28 格式:DOCX 页数:10 大小:1.01MB
下载 相关 举报
arm实验二.docx_第1页
第1页 / 共10页
arm实验二.docx_第2页
第2页 / 共10页
arm实验二.docx_第3页
第3页 / 共10页
arm实验二.docx_第4页
第4页 / 共10页
arm实验二.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

arm实验二.docx

《arm实验二.docx》由会员分享,可在线阅读,更多相关《arm实验二.docx(10页珍藏版)》请在冰豆网上搜索。

arm实验二.docx

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微处理器,做出了铺垫。

教师

评语

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1