实验2 启动程序设计

来源:互联网 发布:淘宝的安逸猿 编辑:程序博客网 时间:2024/06/08 15:12

实验目的及要求:
1、熟悉启动引导程序的功能;
2、了解S3C2440芯片的体系结构,具体是其异常机制,堆栈控制;
3、熟悉并掌握异常向量表的设置;
4、熟悉并掌握堆栈指针的设置;
5、熟悉并掌握应用程序主函数的引导;
6、了解操作系统(如:Linux)的引导。

实验情况及实验结果(包括自己编写的源程序,不够可以附页)
1、 关于验证初始化函数InitStacks中,不将程序最后设置为管理模式下,是否能启动成功?

orr r1,r0,#SVCMODE|NOINT
msr cpsr_cxsf,r1 ;SVCMode
ldr sp,=SVCStack
实验结果:
这里写图片描述
启动失败,因为启动程序在设置中断向量以及其他状态是使用的是管理模式下的LR,如果在初始化函数中不返回到管理状态下,程序就不能返回到正确的LR地址。LR分为两种状态:用户模式下的LR和管理模式下的LR

2、 关于改变启始函数main是否影响程序运行

IMPORT Main
BL Main
B
实验结果:
这里写图片描述
程序正常运行,这里改变启动程序的函数名和main函数的程序名,只要保证两者相同,函数可以正常运行,这里是启动程序决定了程序的函数名,而不是程序决定了启动程序的函数名,我们日常之所以用main也是因为启动程序默认定义的是main。

3、 关于验证中断向量表

这里写图片描述
实验结果:
这里写图片描述

程序正常执行,因为本程序并不能产生中断,所以将其他中断删除后,程序依旧可以正常执行,如果本程序有中断产生,则删除其中的一条,程序产生中断后,启动函数不能将其引导至正确的中断处理函数中。