仿真就是在一个具有某种接口和功能的系统或子系统上实现另一种与之具有不同接口和功能的系统或子系统的过程。
指令集仿真可以使用多种方法来实现,这需要不同数量的计算资源,并且提供不同的性能和可移植性。其中的一个极端就是直接的解释技术,另一个极端就是二进制翻译。解释包括取一条源指令,对其进行分析,执行需要的操作,再取下一条源指令这样一个循环过程,所有工作都是由软件完成的。另一方面,二进制解释试图分摊取值和分析的代价,它将源指令块翻译为目标指令块,并且将翻译后的代码保存起来以便反复使用。
其中使用了表驱动法的技术,并对其进行了某些扩展和优化
基本的解释
狭义上,一个解释器程序在一台实现源ISA的及其的完整结构状态上仿真运行,这些状态包括所有的结构寄存器和主存。客户机内存的印象,包括程序代码和程序数据,被保存在有解释器维护的内存区中。解释器的内存中还保存着一张称之为上下文块的表,它包含了源结构状态的不同部件。
一个简单的解释器是通过逐条指令地执行源程序来运行的,它根据指令读取并修改源状态。这样的解释器常被称为译码分派(decode-and-dispatch)解释器,因为它是围绕一个主循环来组织的,即译码一条指令,然后将其分派给基于指令的解释历程。
线索解释
译码-分派解释器的主分派循环包含许多直接和间接的分支指令。这些分支依靠硬件实现,它们往往会降低性能,特别是在它们难以被