-
JIT动态编译器的原理与实现之Interpreter(解释器)的实现(三)
摘要:接下来,就是要实现一个虚拟机了。记得编码高质量的代码中有一条:不要过早地优化你的代码。所以,也本着循序渐进的原则,我将从实现一个解释器开始,逐步过渡到JIT动态编译器,这样的演化可以使原理看起来更清晰。 解释器的原理很简单,就是一条指令一条指令的解释并执行。具体流程分为:取出指令-解码指令-执行-返回主流程。这样形成一个无限循环,如下图所示: 这里的主流程就是上篇定义的程序rom.bin。但rom.bin不能直接运行,需要一个解释器来包裹它,来解释执行。解释器放在一个无限循环中,使得主流程无限运行不停止:void loop(){ for(;;) { Interpreter(&CP...
阅读全文
-
JIT动态编译器的原理与实现之实现自己CPU的程序(二)
摘要:在上篇设计了一个极简单的CPU,并定义了相应的寄存器和指令集。接下来就是利用定义的寄存器和指令集完成一个程序,最后实现一个虚拟机来运行这个程序。 这个程序由汇编语言编写,并且手工编译成机器码。为了简单起见,设定CPU的寻址范围为64字节。程序代码为:CODE:04 12 I_JMP 12 //直接跳转到内存12的地址DATA:00 00 01 00 07 0F 08 07 00 00 00 00 00 00 00 00 //03-11为数据区CODE:02 03 04 I_ADD 03 04 //将03和04地址内容相加,结果送入03地址02 05 06 I_ADD 05 06 //将0...
阅读全文
-
JIT动态编译器的原理与实现之设计自己的CPU(一)
摘要:从本篇开始,我将开辟一个原创系列来介绍JIT动态编译器的原理以及用一个小例子来阐述实现方法。例子实现主要在WINDOWS平台下,基于VC,主要需要读者了解函数指针的使用,以及一些简单的汇编知识。在此希望各路高手观赏和指正! JIT动态编译器主要用来实现虚拟机,方式是CPU指令转译。由于CPU是计算机的核心,为了简单起见,设计一个简单的8位CPU,并实现一个虚拟机来转译到PC平台。CPU被设计成8位是因为可以避免大端和小端问题,使得目的更加明确。 由于这个CPU是虚拟的,这样就不要求关心流水线什么的,只需要关注CPU寄存器和CPU指令集就足够了。为了简单起见,不定义通用寄存器,只定义PC寄存器.
阅读全文
-
模拟器与虚拟机
摘要:模拟器是什么 emulator,中文一般译为模拟器。但实际上这个翻译是错误的,准确的翻译是仿真器。仿真器与模拟器的区别在于:前者是用软件实现硬件的行为,而后者仅仅是使某一软件的运行和输出在不同平台上没有太大区别。举个例子,如果在某个街机上有一个游戏软件需要在PC平台运行,仿真需要做的是在PC平台上实现一个软件能正确的完成街机硬件的功能,从而使游戏软件可以不进行任何修改的在这个PC平台上实现的软件上运行;而模拟需要做的是修改该游戏的源代码,从而使得游戏可以在PC上编译运行,只要该戏的画面和输出与街机上没有太大区别就可以,也就是所谓的移植。仿真器与虚拟机的区别 简单的说,仿真器和虚拟机(Virtu
阅读全文
|