随笔-341  评论-2670  文章-0  trackbacks-0
02 2009 档案
JIT脚本引擎:用汇编写了一个四则运算字符串分析程序      摘要: 这个汇编程序读入一个字符串,并计算结果。支持加减乘除括号,不支持浮点数,不支持查错。以下是汇编以及注释。汇编程序使用这篇文章的程序编译并执行。  阅读全文
posted @ 2009-02-26 09:05 陈梓瀚(vczh) 阅读(2262) | 评论 (0)  编辑
JIT脚本引擎:动态运行文本格式的汇编代码      摘要: 今天完成了文本格式汇编代码的编译工作。这主要是为了调试,因为编译器不可能产生文本格式的汇编代码,这样会很浪费资源。翻译过程如下:  阅读全文
posted @ 2009-02-26 01:27 陈梓瀚(vczh) 阅读(3425) | 评论 (2)  编辑
JIT脚本引擎:完成链接器的核心功能      摘要: 光能编译汇编还是不行的,因为很多东西在编译的时候不知道,典型的比如放常量那部分的指针等等。主要原因还是因为x87(指FPU部分)没有指令包含浮点立即数,所有装载浮点常数的指令都要求提供指针。所以诸如double a=1.2;之类的代码,需要将1.2预先放置在一个地方然后确定指针的位置。

于是就遇到了一个问题,如何将编译后才知道的指针地址写进去呢?  阅读全文
posted @ 2009-02-22 22:41 陈梓瀚(vczh) 阅读(1984) | 评论 (1)  编辑
JIT脚本引擎:将汇编语言编译成机器码写进内存并在C++中调用      摘要: 在完成了这里和这里的工作之后,就可以写程序生成机器码了。在生成机器码的时候有如下注意事项:

1:可执行代码所在的空间必须使用VirtualAlloc与PAGE_EXECUTE_READWRITE标记分配。
2:程序需要的常量空间、全局变量空间和指令空间需要分开在三个不同的地方。

下面的例子使用一个struct保存指令的每一个部分,并且结合之前产生的指令译码表生成二进制码。  阅读全文
posted @ 2009-02-22 07:08 陈梓瀚(vczh) 阅读(5011) | 评论 (11)  编辑
JIT脚本引擎:识别需要使用66H前缀区分的相同opcode指令的16位版本和32位版本      摘要: 关于这个问题实在没有一个特别好的方法,基本方法还是来源于对intel手册的观察。因为指令表是从手册上面复制出来的,但是上面又没有标明66H前缀,怎么办呢?人肉找规律。这里贴出了区分的代码(进对于之前挑选出来的绝大多数x86与x87指令)以及生成后的一个很有规则的文件以供参考。  阅读全文
posted @ 2009-02-16 21:53 陈梓瀚(vczh) 阅读(2401) | 评论 (1)  编辑
JIT脚本引擎:将汇编指令转换为机器码      摘要: 完整的转换方法需要intel提供免费翻印下载的那本手册。手册过于精简,因此这里给出的例子用于辅助对手册进行理解。假设读者阅读过intel提供的手册,或其他相关资料。  阅读全文
posted @ 2009-02-15 23:45 陈梓瀚(vczh) 阅读(3739) | 评论 (5)  编辑
JIT脚本引擎:x86子集汇编二进制码表整理完成      摘要: 为了节省工作量,我打开intel的手册,然后将那些框框里面的字符串复制到一个文本文件里面,最后写一个C++程序用正则表达式处理。流程如下(含代码和文件):  阅读全文
posted @ 2009-02-14 20:21 陈梓瀚(vczh) 阅读(3185) | 评论 (2)  编辑
GI实现光源穿透版透明物体
posted @ 2009-01-31 09:47 陈梓瀚(vczh) 阅读(3098) | 评论 (1)  编辑