程序最美(寻路)

你还在坚持练习你的技术吗?运动员天天训练,音乐家也会演练更难的曲章。你呢?

2013年10月8日

基于栈的虚拟机源码剖析

摘要: 基于栈的虚拟机源码剖析 之前我们曾剖析过一个栈虚拟机《栈虚拟机源码剖析》,并实现了一个栈虚拟机《实现一个栈虚拟机》。 本文我们对Kevin Lynx的《基于栈的虚拟机的实现》进行学习,学习其源码实现原理和技巧,其源码地址为:source code。 有关该基于栈的虚拟机说明,可以直接参考原文,我们不在此赘述。这里,我们主要是对源码进行分析学习。 该虚拟机对应两个文件:头文件sm.h和源文件sm.c。 其中,sm.h中定义了虚拟机的指令集(二进制指令集),该指令集为枚举类型:enum op_type{ opHalt, opIn, opOut, opAdd, opSub, opMul, op... 阅读全文

posted @ 2013-10-08 22:25 unixfy 阅读(2219) 评论(0) 推荐(0) 编辑

实现一个反汇编器

摘要: 实现一个反汇编器 上文《反汇编器源码剖析》,我们对一反汇编器源码进行了学习,了解了反汇编器的实现原理。反汇编是汇编的逆过程,其也是包含三个主要部分:汇编指令集二进制指令集二进制指令到汇编指令的映射 有了这三部分之后,我们就可以对二进制指令,将其翻译成汇编指令,也就完成了反汇编过程。 我们的二进制指令集和汇编指令集还是沿用之前的指令集。 下面我们先给出实现的反汇编器,然后对相关代码进行解释。// 实现一个反汇编器#include #include #include #include #include using namespace std;enum BinIns;// 二进制指令结构体//... 阅读全文

posted @ 2013-10-08 21:05 unixfy 阅读(2374) 评论(0) 推荐(0) 编辑

反汇编器源码剖析

摘要: 反汇编器源码剖析 之前我们有对一汇编器进行源码剖析,详见《汇编器源码剖析》,并且《实现一个汇编器》。本文,我们继续之前的工作,对反汇编器进行源码剖析,之后我们会根据反汇编器的实现原理,实现一个自己版本的反汇编器。本文剖析的反汇编器代码详见:source code。 源码中反汇编器对应的文件为sdasm.c。 sdasm.c文件中包含汇编指令集的定义op_desc,其类型为字符串数组。const char *op_desc[] = { "HALT", "IN", "OUT", "ADD", "SUB&quo 阅读全文

posted @ 2013-10-08 20:50 unixfy 阅读(1633) 评论(0) 推荐(0) 编辑

实现一个汇编器

摘要: 实现一个汇编器 上文《汇编器源码剖析》中,我们对一汇编器进行了源码剖析,这里我们仿照其实现一个自己版本的汇编器,90%的东西都是借鉴于上文中的源码。 实现一个汇编器,首先需要定义一个汇编指令集,这里我们还是沿用上文中的汇编指令集。汇编指令与指令之间是一一对应的关系,也就是说是直译的过程。我们的指令集是枚举类型,也是沿用上文源码的指令集。 我们的函数功能是对输入的汇编指令,将其读入,翻译成对应的二进制代码,然后将其输出。 实现汇编器的重点在于理解汇编器的原理,而汇编器的原理就在于定义好汇编指令集、二进制指令集,并且确定好二者之间的映射转换关系。 以上即是汇编器的原理。具体如何定义汇编指令集... 阅读全文

posted @ 2013-10-08 20:44 unixfy 阅读(8689) 评论(1) 推荐(2) 编辑

汇编器源码剖析

摘要: 汇编器源码剖析 本文我们对一汇编器源代码进行剖析,了解汇编器实现原理,进而我们根据样例,自己实现一个汇编器。实现自己版本的汇编器放在另一篇中,本文主要是对别人的源码进行剖析。 本文源代码是来自Kevin Lynx的《基于栈的虚拟机的实现》中关于实现一个堆栈虚拟机中附带了汇编器的实现,源码下载地址如下:source code。由于本人对汇编器比较感兴趣,所以对其进行如下剖析。 汇编器主要是一个sasm.c源文件。 其中,一开始定义了一个const char* op_desc[],op_desc是一个数组,其元素类型是const char*,即op_desc是一个字符串数组,其用于存储汇编操作符。 阅读全文

posted @ 2013-10-08 20:22 unixfy 阅读(5914) 评论(0) 推荐(0) 编辑

导航