欢迎来到天天文库
浏览记录
ID:35342220
大小:59.39 KB
页数:4页
时间:2019-03-23
《实验八_arm处理器工作模式与堆栈指针实验》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实验八ARM处理器工作模式与堆栈指针设置实验1实验目的(1)通过实验掌握学会使用MSR和MRS指令实现ARM工作模式的切换,观察不同模式下的寄存器,尤其是状态寄存器,加深对CPU的理解;(2)掌握ARM堆栈指针SP的设置方法和意义,在设置好的堆栈中压入适当的数据,并使用寄存器窗门、存储器窗门观察。2实验内容(1)主要内容①ARM9处理器支持7中工作运行模式(如表1)表1.ARM9运行模式处理器模式处理器模式描述CPSR寄存器的M[4:0]的值用户模式usrARM处理器正常程序执行模式OblOOOO快速中断模式fiq用丁•高速数据传输或通道处理0b1000
2、1外部中断模式irq用于通用的中断处理0b10010管理模式SVC操作系统使用的保护模式0b10011数据访问终止模式abt当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护0b10111未定义指令终止模式und当未定义的指令执行时进入该模式0b11011系统模式sys运行具冇特权的操作系统任务0b11111特权模式:乂称非用户模式。是指除用户模式以外的6种模式。在这些模式下程序可以访问所冇的系统资源,也可以任意地进行处理器模式切换。用户模式下是不允许模式切换的。异常模式:是指除用户模式和系统模式以外地5种模式,常用于处理中断。界常模式有:•FI
3、Q(FastInterruptReQuest)•IRQ(InterruptReQuest)•管理sve(Supervisor)•中止abt(Abort)•未定义und(Undefined)在特定地异常出现时,进入相应的模式。某种模式都有附加的寄存器,以避免出现异常吋用户模式的状态不可靠。在软件的控制下可以改变模式,外部屮断和异常也可以引起模式发生改变。大多数应用程序在用户模式下执行。当处理器工作在用户模式吋,正在执行的程序不能访问某些被保护的处理器资源,也不能改变模式,除非异常(Exception)发生。这允许适当编写操作系统來控制系统资源的使用。ARM
4、9体系结构的异常类型和异常处理模式(如表2)表2异常类型进入模式地址(异常向量)优先级复位管理模式0x000000001(最高)未定义指令未定义模式0x000000046(最低)软件中断管理模式0x000000086(最低)指令预取中止中止模式OxOOOOOOOC5数据中止中止模式0x000000102外部中断请求外部中断请求模式0x000000184快速中断请求快速中断请求模式0x0000001C3②状态寄存器CPSR/SPSR以及对其进行的访问•状态寄存器CPSR和SPSR:包含了条件码标志,中断禁止位,当而处理器模式以及其它状态和控制信息。每种界常
5、都有一个程序状态保存寄存器SPSR,当异常出现时SPSR用于保存CPSR的状态值。CPSR和SPSR的格式如下:NZCVQ预留IFTM4M3M2MlM0状态位:位31-28依次为N、Z、C、V分别表示符号位Negative、零位Zero、进位位Carry和溢川
6、位Overflowo控制位:中断控制位I(b7)、快速中断控制位F(b6)和ARM/Thumb控制位。M4、M3、M2、Ml、MO(M[4:0])是模式控制位,反映和决定ARM处理器的工作模式。•对CPSR寄存器的访问程序状态寄存器到通用寄存器传送指令格式MRS{条件码}Opl,CPSR/SPSR
7、;Opl-CPSR/SPSR说明:Opl是通用寄存器;CPSR是当前程序状态寄存器。通用寄存器到程序状态寄存器传送指令格式MSR{条件码}CPSR/SPSR,Op2_Domain,;CPSR/SPSR-Op2说明:Op2是通用寄存器;CPSR是当前程序状态寄存器。域Domain用于设置CPSP/SPSR中需要操作的位,32位的程序状态寄存器被分为4个域:最高8位,即b31-b24为条件标志位域,用f表示。在指令中的形式为CPSR_fo次高8位,即b23〜bl6为状态位域,用s表示。口前备用。次低8位,即bl8〜b8为扩展域,用x表示。目前备用。最低8位,
8、即b7〜bO为控制位域,用c表示。在指令中的形式为CPSR_Co(2)主要完成的工作①编写一个汇编程序,程序的入口地址为0x00000000,即进入到系统的启动入口Reset,此时系统进入到管理模式,这时就可以进行模式的切换,设置各模式下的SP指针,并写入数据在和应的模式状态下观察SP指针值和和应的存储单元内容;或通过访问ARM9'
9、•不存在的地址程序,使程序发生取址屮断异常,进入此模式后,改变其专有的R13、R14的值,并进行观察。Z后可以改变M[4:0]的取值而进入相应的模式,对其专有的寄存器赋值并观察,最后回到用户模式。②编写各堆栈区初始化汇编程序
10、。利用汇编伪指令EQU定义模式字、所有栈顶的基址,然后根据各个栈区的大小连续向下
此文档下载收益归作者所有