山东大学嵌入式实验报告

(快速中断模式)

观察r13,快速中断模式的堆栈地址为0x8380

满递减模式,观察运行结果发现,快速中断模式中只有R1-R7压栈了,这是因为在快速中断模式中,可访问的寄存器只有R1-R7,不能访问R8-R12,快速中断模式下有自己的R8-R12。 (中止模式)

观察r13,中止模式的堆栈地址为0x83C0

满递减模式,r1-r12压栈后,中止模式栈顶指针为0x8310,相距0x30,压入12个字

(未定义模式)

观察r13,未定义模式的堆栈地址为0x8400

满递减模式,r1-r12压栈后,未定义模式栈顶指针为0x83d0,相距0x30,压入12个字

(系统模式)

观察r13,系统模式的堆栈地址为0x81C0

满递减模式,r1-r12压栈后,系统模式栈顶指针为0x8190,相距0x30,压入12个字

分析快速中断FIQ模式与其他模式存入的R1-R12有什么不同:

快速中断FIQ模式中:R8~R13都是0。这是因为在快速中断模式中,可访问的寄存器只有R1-R7,不能访问R8-R12,快速中断模式下有自己的R8-R12。

8) 切换成用户模式之后还能否从用户模式切换到其他模式(如系统模式)?

答:在该例程中,由用户模式不可以切换到系统模式。当处理器工作在用户模式时,正在执行的程序不能访问某些被保护的系统资源,也不能改变模式,除非异常发生。

9) 用户模式下能否执行堆栈压栈操作?如果能的话,观察用户模式下压栈之前和之后其堆

栈区域的变化情况。

答:用户模式下能执行堆栈压栈操作。 未压栈时:用户模式堆栈指针初始值为0X8190

压栈之后,堆栈指针减小0x30,这是因为堆栈设置为满递减模式,所以堆栈指针减小0x30,存放12个字。

10)

观察本程序模式切换过程中SPSR有无变化,并解释其原因。

答:模式切换过程中SPSR无变化,因为在整个切换过程中没有异常发生,所以SPSR无变化。

实验四 ARM汇编与C混合编程实验----ARM启动过程控制实验

实验目的

(1) 掌握建立基本完整的ARM 工程,包含启动代码,C语言程序等;

(2) 了解ARM 启动过程,学会编写简单的C 语言程序和汇编程序启动代码并进行调试; (3) 掌握如何指定代码入口地址与入口点;

(4) 掌握通过memory/register/watch/variable 窗口分析判断错误。 实验内容

使用汇编语言编写初始化程序,并引导至C语言main函数,用汇编语言编写延时函数实现毫秒级的延时,在C语言中调用延时函数,实现1s钟定时。 实验要求

(1)按照2.3节介绍的方法,在ADS下创建一个工程armasmc,编写3个文件,通过AXD运用单步执行方式进行调试程序,观察程序执行过程中的寄存器及存储器的变化情况。 (2)实验过程中请记录并思考以下内容: 1)如何建立异常矢量入口表?

2)如何在汇编语言中切换至C语言的main函数? 3)如何在C语言中调用汇编语言函数,并完成参数传递?

联系客服:779662525#qq.com(#替换为@)