新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于X86平台的ARM指令集模拟器的设计

基于X86平台的ARM指令集模拟器的设计

作者:时间:2016-10-10来源:网络收藏

2.2 指令集的流程设计
是按照解释型的模拟策略设计的。解释型指令集模拟器基本上是以软件实现的虚拟机,它以解释的形式在宿主机上执行加载的目标代码,它的主体是一个具有3步过程的循环体,分别对应取指令、指令译码、指令执行3步操作。因此本指令集模拟器的核心流程就是加载程序,之后进入读取指令、指令译码和指令执行的循环体中,当所有目标代码都执行之后结束并显示运行结果。整个流程如图4指令模拟器的工作流程所示。

本文引用地址:http://www.eepw.com.cn/article/201610/306034.htm

b.JPG


2.3 指令集模拟器的主要功能模块设计
2.3.1 指令译码模块
指令译码模块的功能就是根据ARM指令集编码,将要执行的二进制指令译码成操作码、操作数、条件码等指令模拟需要的信息。指令集模拟器的每一模拟步模拟一条指令的取指令、译码、执行等各个阶段,因此指令集模拟器中的指令译码与实际ARM处理器的译码并不是完全对应,同时也不会影响模拟的正确性。
在指令译码模块中,本文采用分类的思想,将指令集按照一定的规律进行分类解析,逐步解析,找到最终指令所对应的解析函数。这样做的目的是为了减少判断指令时的条件判断次数,采用分治的思想提高指令译码的效率。不过要想对指令译码效率有显著性的提高,还是要采用改进型的工作流程,主要原因是在指令译码的过程中,会出现大量的重复译码,所以改进型的工作流程中提出的指令缓存技术会很好的提高译码效率,减少重复的译码工作。
2.3.2 指令模拟与调度模块
指令模拟与调度功能模块是指令集模拟器的核心部分,也是实现代码量最大的部分,主要包括与虚拟指令集定义对应的一系列指令模拟函数、指令执行控制函数、指令翻译调度函数、中断处理函数以及一些公用函数。指令执行控制函数负责控制整个模拟过程,反汇编结果文件加载完毕后,程序就进入核心部分的模拟循环;指令翻译调度函数负责将目标指令转化为虚拟指令形式,然后指令模拟函数按照相应指令的功能定义完成指令的模拟,模拟结果是修改存储器、寄存器值:公用函数主要包括寻址方式判别、指令操作数分析、指令条件码判别、移位操作、ALU操作以及寄存器访问等。指令模拟与调度的循环过程如下:
1)取指令
该模拟器的输入是二进制可执行文件,因此取指令时,根据PC值取得的当前的指令,进行译码。
2)翻译
调用指令翻译函数获得虚拟指令。
3)调度
根据指令类型,调用相应的指令模拟函数。
4)执行
指令模拟函数对指令进行模拟。
5)中断检测与调度
为了对中断系统进行模拟,本文定义了对应于FIQ、IRQ的标志变量,可以改变他们来模拟外部中断输入,每条指令模拟结束后,必须检测上述两个标志,如果检测到中断发生,则调用相应的异常进入函数,PC被设定为中断服务程序入口地址。
6)更新PC值
如果本次循环没有发生指令跳转、加载PC及中断,PC顺序移向下一条指令。



关键词: X86 ARM 模拟器

评论


相关推荐

技术专区

关闭