一份关于两个汇编语言级别模拟CPU的虚拟机的分析文档( 二 )

<<学习opcode>>:http://www.luocong.com/learningopcode.htm,遗憾的是作者从开始写这份教程一直到现在差不多两年时间过去了还没有完成,不过前面的文章对于理解opcode的基本概念已经足够了 。opcode看起来好像很高深,其实它就在我们身边,在linux上有一个objdump的反汇编软件可以反汇编二进制文件,比如这样的一段反汇编的代码:

代码:

116: 89 e5 mov %esp,雙

其中的116是指令地址,而89 e5就是指令mov %esp,雙 所对应的opcode 。

总结一下,设计一个汇编语言级别的虚拟机至少需要以下的部件:1)内存空间,用于存放机器指令之用 。2)寄存器:用于保存程序运行的状态,暂存数据等等之用 。3)汇编器,汇编器的功能就是把汇编指令翻译成cpu指定的机器指令,然后将指令装入虚拟机的内存之中 。4)指令集,指令集包括了指令的助记符,也就是汇编语言中的指令,还需要有每个指令所对 应的机器指令也就是OpCode,助记符由汇编器处理翻译成为机器指令,最后在cpu执行的时候根据不同的机器指令来执行相关的操作 。

虽然这两个虚拟机的设计略有不同,但是由于都是模拟的汇编语言级别的cpu,所以工作过程大体都是一致的,把握这个运行的过程是正确掌握这两个源代码的关键所在!虚拟机运行的大体过程如下:首先由汇编起扫描汇编源文件,将汇编指令也就是机器指令的助记符翻译为机器指令,如果没有错误就把机器指令加载到内存之中,这时汇编器的任务就结束了;然后由虚拟机读取已经装载到内存中的机器指令,根据机器指令对应的操作来执行指令 。
ok,这里基本上把一些基本的概念解释完了,后面紧跟着就可以开始我们的虚拟机之旅了....

推荐阅读