不同的CPU(IA-32,ARM9等)操作在本质上应该等效(移动,读取,写入数据等)。不同的CPU相互模拟应该不会很痛苦。但是似乎并不容易,因为仿真软件的运行速度太慢。我们可以简单地转换一个可执行文件,然后执行它吗?无论如何,为什么它是如此依赖资源(为什么我需要一个功能强大的CPU来模拟其他CPU)?不得不说我没有低级的编程技能。非常感谢。
首先,尽管肯定有一些非常相似的指令,但并不是有些指令集在不同的CPU架构上总是表现出相同的方式。为了获得精确的仿真,通常(通常)不足以翻译每条指令-您必须处理内存访问,定时,中断...而这仅适用于CPU。
您似乎想的是静态重新编译,但这很难做到(实际上,我认为这归结为停顿问题,从理论上讲实际上是不可能的)。实际上,有时我们可以对一部分程序执行此操作,但是您无法编写通用编译器,该通用编译器将一种体系结构的目标代码作为输入,而输出另一种体系结构的完全等效的代码。例如,使用这种方法很难处理自修改代码。
动态重新编译(在程序执行时即时生成代码)更加成功(正确执行仍然很简单)。但是,具体问题将取决于体系结构。在许多情况下,仿真CPU并不是问题,而是仿真各种外围设备并保持准确的时序(请参见byuu的仿真SNES文章)。
有时,您可以忽略很多这些约束,而仍然可以很好地模拟硬件,以使软件的一个子集正常工作,但是(据我所知),除非您拥有实际的硬件,否则就不可能(零)以零的开销获得100%的准确性。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句