内容发布更新时间 : 2024/12/23 16:24:48星期一 下面是文章的全部内容请认真阅读。
(快速中断模式)
观察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语言中调用汇编语言函数,并完成参数传递?