SSforME  
12 2012 档案
  • 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... 阅读全文
    posted @ 2012-12-18 21:30 SSforME 阅读(1991) 评论(4) 推荐(2)
  • JIT动态编译器的原理与实现之设计自己的CPU(一)
    摘要:从本篇开始,我将开辟一个原创系列来介绍JIT动态编译器的原理以及用一个小例子来阐述实现方法。例子实现主要在WINDOWS平台下,基于VC,主要需要读者了解函数指针的使用,以及一些简单的汇编知识。在此希望各路高手观赏和指正! JIT动态编译器主要用来实现虚拟机,方式是CPU指令转译。由于CPU是计算机的核心,为了简单起见,设计一个简单的8位CPU,并实现一个虚拟机来转译到PC平台。CPU被设计成8位是因为可以避免大端和小端问题,使得目的更加明确。 由于这个CPU是虚拟的,这样就不要求关心流水线什么的,只需要关注CPU寄存器和CPU指令集就足够了。为了简单起见,不定义通用寄存器,只定义PC寄存器. 阅读全文
    posted @ 2012-12-16 14:49 SSforME 阅读(2517) 评论(10) 推荐(4)
  • 模拟器与虚拟机
    摘要:模拟器是什么 emulator,中文一般译为模拟器。但实际上这个翻译是错误的,准确的翻译是仿真器。仿真器与模拟器的区别在于:前者是用软件实现硬件的行为,而后者仅仅是使某一软件的运行和输出在不同平台上没有太大区别。举个例子,如果在某个街机上有一个游戏软件需要在PC平台运行,仿真需要做的是在PC平台上实现一个软件能正确的完成街机硬件的功能,从而使游戏软件可以不进行任何修改的在这个PC平台上实现的软件上运行;而模拟需要做的是修改该游戏的源代码,从而使得游戏可以在PC上编译运行,只要该戏的画面和输出与街机上没有太大区别就可以,也就是所谓的移植。仿真器与虚拟机的区别 简单的说,仿真器和虚拟机(Virtu 阅读全文
    posted @ 2012-12-06 20:48 SSforME 阅读(3215) 评论(0) 推荐(0)