厦门大学软件学院《毕业设计(论文)》开题报告
学生姓名
班级
学号
校内指导教师姓名
职称
所在单位
厦门大学软件学院
校外指导教师姓名
职称
毕业设计(论文)题目
基于ARM体系的虚拟机的构架实现
毕业设计(论文)的目标:
在晋通PC平台上实现ARMv4体系的虚拟机。随着时代的发展,嵌入式开发应用已经深入各个领域,前景十分看好。目前,嵌入式开发方式都以实际硬件为主,由于代价较高,不利于学****和开发调试,使得嵌入式开发门槛较高,难以普及。
虚拟机是一项应用广泛的技术,它也早已在嵌入式开发中得到大量的应用。在嵌入式开发中,很多时候,我们只需要在虚拟机中调试我们的程序,就可以让程序很好地移植到实际硬件平台上执行。
ARM系列CPU是目前最成功和最广泛地应用于嵌入式的CPU系列。我们的目标是实现一个基础的ARM体系的虚拟机。
实现方法:
我们的实现方式遵循从内部到外围逐渐完善的方式迭代完成整个虚拟机的开发。
我们以虚拟ARMv4体系,ARM920T核心的系统为目标。
我将完成CPU的译码与执行。
指令结构:
ARMv4包括如下类型指令:
跳转指令
数据处理指令
状态寄存器转移指令
存储指令
协处理器指令
异常产生指令
部分指令分析图:
跳转指令:
B,BL,BLX,BX
数据处理指令:
AND,EOR,SUB,RSB,ADD,ADC,SBC,RSC,TST,TEQ,CMP,CMN,ORR,MOV,BIC,MVN
乘法指令包括:
通常,32位结果:MUL,MLA
长,64位结果:SMULL,UMULL,SMLAL,UMLAL
算术指令包括:CLZ
信号指令:SWP,SWPB
状态寄存器转移指令:
CPSR,SPSR
存储指令
存取指令:LDR,STR
多次存取指令:LDM,STM
协处理器指令:
CDP,LDC,MCR,MRC,STC
异常产生指令:
SWI,BKPT
指令解析:
通过构造指令结构树,可以很方便地处理指令,并能使代码更好地文档化。
以指令LDR的解析为例:
首先:
ARM的每个指令32位。其中处与最高的4位地址用于条件判断。
这样共有16种指令执行判断,如下:
我们可以在C++中这样描述它:
struct cond_op
{
UINT32 cond:4;
UINT32 code:28;
};
这样,如果当前指令存储在变量中:
我们先这样:
if( STAUS_REGISTER( cond ==1 )
{
//在这里继续执行指令
}else
{
//不用执行指令
}
如果状态寄存器指示本条指令要被执行,我们就继续解析它。
为了判断是那一条指令,我们定义:
struct sel_op
{
UINT32 cond:4;
UINT32 sel:4;
UINT32 code:24;
};
通过sel来判断指令类型:
ProcessInstruction(sel);
ProcessInstruction是一个分配函数,它以sel为索引,查找一个函数指针数组,并调用相应函数。
现在,我们可以知道它是存取指令:
这样我们构造出这样的结构体:
struct ld_st_op
基于ARM体系的虚拟机的构架实现毕设开题报告 来自淘豆网www.taodocs.com转载请标明出处.