﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-λ-calculus（长门流的程序员们，5月21日23:40，此刻我们胜利啦！）-随笔分类-JIT</title><link>http://www.cppblog.com/vczh/category/9583.html</link><description>【QQ：343056143（已满），504254078】【MSN：vczh@hotmail.com】【Email：vczh@163.com】</description><language>zh-cn</language><lastBuildDate>Fri, 22 May 2009 09:14:52 GMT</lastBuildDate><pubDate>Fri, 22 May 2009 09:14:52 GMT</pubDate><ttl>60</ttl><item><title>【源码下载】JIT脚本引擎：CMinus 0.1版开放下载</title><link>http://www.cppblog.com/vczh/archive/2009/05/22/85424.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Fri, 22 May 2009 08:32:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2009/05/22/85424.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/85424.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2009/05/22/85424.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/85424.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/85424.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 说明：CMinus是一个读入修改过语法的C源程序，然后编译成x86指令集写入内存，最后用__stdcall调用约定跟C++互相交流的脚本引擎。<br>目标：CMinus的定位是中间语言，用于将其他语言编译到CMinus上，享受本地指令带来的好处。<br>进度：完成所有功能，但是由于指令集生成的算法不好，打算修改。<br>下载：【内详】。&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2009/05/22/85424.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/85424.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2009-05-22 16:32 <a href="http://www.cppblog.com/vczh/archive/2009/05/22/85424.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JIT脚本引擎：CMinus编译冒泡排序程序</title><link>http://www.cppblog.com/vczh/archive/2009/05/20/83434.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Wed, 20 May 2009 00:51:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2009/05/20/83434.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/83434.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2009/05/20/83434.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/83434.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/83434.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 虽然CMinus到中间指令的代码是精心控制的，但是中间指令到x86的代码却是很随意写出来的。现在看来用窥孔优化只是一种治标不治本的方法。打算在CMinus整个都完成了之后，将中间指令到x86的代码生成那部分重写，使用一种广为人知的寄存器分配算法来做。下面是冒泡排序的程序：&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2009/05/20/83434.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/83434.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2009-05-20 08:51 <a href="http://www.cppblog.com/vczh/archive/2009/05/20/83434.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JIT脚本引擎：第一个CMinus程序运行成功</title><link>http://www.cppblog.com/vczh/archive/2009/05/18/83279.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Mon, 18 May 2009 07:00:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2009/05/18/83279.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/83279.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2009/05/18/83279.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/83279.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/83279.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 目前其实只能编译单目运算符和return语句，主要是为了看看整个大框架有没有错误。如果没有发现错误的话，其他种类的表达式和语句的代码生成很容易加上去。下面是一个CMinus程序的例子和编译结果（汇编）：&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2009/05/18/83279.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/83279.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2009-05-18 15:00 <a href="http://www.cppblog.com/vczh/archive/2009/05/18/83279.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JIT脚本引擎：基本完成CMinus的语义分析</title><link>http://www.cppblog.com/vczh/archive/2009/05/07/82115.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Wed, 06 May 2009 16:13:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2009/05/07/82115.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/82115.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2009/05/07/82115.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/82115.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/82115.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 整整写了一天，终于基本写完了CMinus的语义分析的代码，只剩下一个检查struct是否可以计算出长度的问题（环引用造成的）。下面贴出语义分析的结果，从结果中可以看出符号表的结构以及构造方法：&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2009/05/07/82115.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/82115.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2009-05-07 00:13 <a href="http://www.cppblog.com/vczh/archive/2009/05/07/82115.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JIT脚本引擎：CMinus大部分语法测试通过</title><link>http://www.cppblog.com/vczh/archive/2009/05/05/81922.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Tue, 05 May 2009 03:44:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2009/05/05/81922.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/81922.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2009/05/05/81922.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/81922.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/81922.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 今天写了一些CMinus程序供语法分析器分析，然后程序从语法树重新生成格式化后的代码，两边比较检查优先级什么的是否正确处理。下面是CMinus写的冒泡排序、菲薄纳气数列、链表操作函数以及其他程序：&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2009/05/05/81922.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/81922.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2009-05-05 11:44 <a href="http://www.cppblog.com/vczh/archive/2009/05/05/81922.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JIT脚本引擎：实现CMinus语法分析器</title><link>http://www.cppblog.com/vczh/archive/2009/05/04/81817.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Mon, 04 May 2009 03:25:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2009/05/04/81817.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/81817.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2009/05/04/81817.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/81817.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/81817.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 这一次的语法分析器，我使用Vczh Combinator Parser，按照文法的定义，将字符串转换成了语法树。Vczh Combinator Parser构造较大规模的编译器的时候还是较为吃力，主要原因出在Visual C++竟然限制一个类型全名不能超过某个长度T_T……下面是代码：&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2009/05/04/81817.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/81817.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2009-05-04 11:25 <a href="http://www.cppblog.com/vczh/archive/2009/05/04/81817.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JIT脚本引擎：C Minus语言语法树定型</title><link>http://www.cppblog.com/vczh/archive/2009/04/24/80960.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Fri, 24 Apr 2009 08:58:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2009/04/24/80960.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/80960.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2009/04/24/80960.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/80960.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/80960.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 今天照着C Minus的语法（略有修改）设计出了C Minus的语法树。语法树的设计尽量让生成语法树的代码易于编写。每一个结构的意义十分明确，而且结构与结构之间不需要有相互联系。下面是语法树的代码：&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2009/04/24/80960.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/80960.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2009-04-24 16:58 <a href="http://www.cppblog.com/vczh/archive/2009/04/24/80960.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JIT脚本引擎：开始做第一门编译成机器码的脚本引擎</title><link>http://www.cppblog.com/vczh/archive/2009/04/18/80359.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Sat, 18 Apr 2009 08:17:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2009/04/18/80359.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/80359.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2009/04/18/80359.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/80359.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/80359.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要:     把中间指令都搞定了之后，得开始做一门JIT的脚本引擎了。但是这门脚本引擎不是用来写的，而是用来给更高级的语言编译的。这是什么意思呢？虽然我现在写了个语法分析器，提供了语法树，但是我的目的是让我以后设计的更高级的语言可以编译成这门相对底层的语言，而不是直接编译成中间指令。这样很多事情都会好做很多。<br><br>    这一门语言主要模仿C，提供指针、结构、数组、基本类型和函数指针。还有extern函数做外部链接用。因为编译成机器码，所以可以直接把一个函数指针丢进我的脚本引擎，就可以这么用了。而且我的脚本里面的函数也可以直接作为一个函数指针提供出来。复合类型组要勇于跟C++交互。在C++与脚本里面声明同样的struct，不需要做额外工作，就可以互相使用了。<br>&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2009/04/18/80359.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/80359.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2009-04-18 16:17 <a href="http://www.cppblog.com/vczh/archive/2009/04/18/80359.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JIT脚本引擎：完成20个浮点函数</title><link>http://www.cppblog.com/vczh/archive/2009/04/16/80189.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Thu, 16 Apr 2009 13:39:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2009/04/16/80189.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/80189.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2009/04/16/80189.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/80189.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/80189.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: <br>FPU写起来还真是囧啊，下面20个函数实现到想死……<br>Sin,Cos,Tan,Cot,Sec,Csc,ASin,ACos,ATan,ACot,ASec,ACsc,Sqrt,Exp,Ln,Abs,Round,Trunc,Ceil,Floor<br>下面是这20个函数的汇编代码，其中Exp更是登峰造极……&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2009/04/16/80189.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/80189.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2009-04-16 21:39 <a href="http://www.cppblog.com/vczh/archive/2009/04/16/80189.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JIT脚本引擎：测试除特殊浮点函数外的所有指令通过</title><link>http://www.cppblog.com/vczh/archive/2009/04/16/80143.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Thu, 16 Apr 2009 05:15:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2009/04/16/80143.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/80143.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2009/04/16/80143.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/80143.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/80143.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 昨天为机器码编译程序写了个专用的unit test框架，今天用中间语言在这个框架上写了个程序。程序将12个字符串连接起来，然后跟另外一个字符串进行比较，如果相等返回true。当然程序如果返回false了，要么就是程序有问题，要么就是编译器有问题。当然现在是测试通过了。程序如下：&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2009/04/16/80143.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/80143.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2009-04-16 13:15 <a href="http://www.cppblog.com/vczh/archive/2009/04/16/80143.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JIT脚本引擎：成功将第一个脚本编译成机器码</title><link>http://www.cppblog.com/vczh/archive/2009/04/14/79897.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Tue, 14 Apr 2009 08:11:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2009/04/14/79897.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/79897.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2009/04/14/79897.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/79897.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/79897.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 这次工作将一个中间语言的程序翻译成了汇编，然后再翻译成机器码。这一次产生的汇编比较烂，到时候做个窥孔优化稍微处理一下就好了。等上层的设施搞定之后再将这个中间语言到汇编的程序重写。下面是一个菲薄纳气数列的例子。&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2009/04/14/79897.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/79897.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2009-04-14 16:11 <a href="http://www.cppblog.com/vczh/archive/2009/04/14/79897.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JIT脚本引擎：继续工作</title><link>http://www.cppblog.com/vczh/archive/2009/04/11/79591.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Sat, 11 Apr 2009 07:30:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2009/04/11/79591.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/79591.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2009/04/11/79591.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/79591.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/79591.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 大约两个多星期没做JIT了，经过之前些其他代码消遣，现在还是继续做下去的好。目前的成果是完成了汇编数据结构、完成了汇编到机器码的转换器、知道了成员对齐、调用转换的约定、知道如何实现异常处理以及完成了中间指令的数据结构和检查。现在需要做的事中间指令到汇编的转换程序。&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2009/04/11/79591.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/79591.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2009-04-11 15:30 <a href="http://www.cppblog.com/vczh/archive/2009/04/11/79591.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JIT脚本引擎：中间语言定稿并完成验证工作</title><link>http://www.cppblog.com/vczh/archive/2009/03/20/77293.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Fri, 20 Mar 2009 04:49:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2009/03/20/77293.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/77293.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2009/03/20/77293.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/77293.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/77293.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 经过一个多星期的推敲，终于将中间语言定稿。为了屏蔽寄存器、堆栈、数值比较逻辑、跳转、变量参数存放位置等，设计了以下中间语言。&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2009/03/20/77293.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/77293.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2009-03-20 12:49 <a href="http://www.cppblog.com/vczh/archive/2009/03/20/77293.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JIT脚本引擎：中间指令草稿</title><link>http://www.cppblog.com/vczh/archive/2009/03/11/76207.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Wed, 11 Mar 2009 05:05:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2009/03/11/76207.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/76207.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2009/03/11/76207.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/76207.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/76207.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要:     中间指令主要用于解决以下问题：<br>    1、不同大小的整数、浮点、指针的互相转换和计算<br>    2、寄存器分配<br>    3、跳转<br>    4、调用转换（stdcall、cdecl、fastcall）<br>    5、临时存储单位（变量等）<br><br>    因此指令在设计的时候需要<br>    1、不让用户知道东西是放在哪里的（没有堆栈给你push和pop，而且变量在物理上不一定存在，譬如说可能在寄存器里面，或者直接优化没了等等）<br>    2、不让用户接触到各种标志位（譬如说那个恶心的浮点比较）<br>    3、不让用户接触到stdcall、cdecl和fastcall的区别（因此call指令需要将所有参数一起写入，而不是在之前push）<br>    4、不让用户接触不同类型数据的转换过程（全自动处理，就算你int32=fp32+int16，也是一条指令。）<br>    5、为了保持灵活性，声明变量的时候只指出其大小，在使用变量的每一处地方标记类型（因此可以在不同的地方标记为不同的，可以救急）<br>&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2009/03/11/76207.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/76207.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2009-03-11 13:05 <a href="http://www.cppblog.com/vczh/archive/2009/03/11/76207.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JIT脚本引擎：成员对齐详解</title><link>http://www.cppblog.com/vczh/archive/2009/03/10/76098.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Tue, 10 Mar 2009 04:46:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2009/03/10/76098.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/76098.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2009/03/10/76098.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/76098.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/76098.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 为了让编译成x86后的代码可以转换成C++的函数指针，我们也必须处理成员对齐的事情。如果脚本里的结构成员对齐跟C++不一致的话，会造成很多麻烦。下面是成员对齐的计算方法：&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2009/03/10/76098.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/76098.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2009-03-10 12:46 <a href="http://www.cppblog.com/vczh/archive/2009/03/10/76098.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JIT脚本引擎：浮点运算</title><link>http://www.cppblog.com/vczh/archive/2009/03/06/75771.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Fri, 06 Mar 2009 12:56:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2009/03/06/75771.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/75771.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2009/03/06/75771.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/75771.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/75771.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: x87的FPU支持很多种浮点运算，其中浮点运算的比较结果不放在EFLAGS里，我们需要人手取出。在比较a和b的时候，C2=0，C3=(a==b)，C0=(a&lt;b)。我们可以将FNSTSW AX指令将浮点标志位复制到AX，然后通过读取C3、C2和C0（分别位于第14、10、8位）来判断结果。下面是一个求浮点数组最大值的汇编函数：&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2009/03/06/75771.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/75771.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2009-03-06 20:56 <a href="http://www.cppblog.com/vczh/archive/2009/03/06/75771.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JIT脚本引擎：关于自己的异常处理函数在Release下失效的解决办法</title><link>http://www.cppblog.com/vczh/archive/2009/03/05/75565.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Wed, 04 Mar 2009 16:40:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2009/03/05/75565.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/75565.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2009/03/05/75565.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/75565.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/75565.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本来昨天搞定了异常处理之后决定狂喜一天，谁知道今天用release编译了一下之后竟然挂了！资料找了半天发现是Windows XP之后提供的一项保护SAFESEH搞的鬼。于是需要将自己的异常处理函数添加进PE头的SAFESEH列表中。方法如下：&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2009/03/05/75565.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/75565.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2009-03-05 00:40 <a href="http://www.cppblog.com/vczh/archive/2009/03/05/75565.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JIT脚本引擎：使用汇编实现__try和__catch</title><link>http://www.cppblog.com/vczh/archive/2009/03/03/75432.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Tue, 03 Mar 2009 08:20:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2009/03/03/75432.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/75432.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2009/03/03/75432.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/75432.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/75432.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 使用上一篇文章的资料，就可以使用汇编实现异常处理了。下面来看一个例子。&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2009/03/03/75432.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/75432.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2009-03-03 16:20 <a href="http://www.cppblog.com/vczh/archive/2009/03/03/75432.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JIT脚本引擎：关于X86上Windows 32位操作系统异常处理（SEH）的处理过程</title><link>http://www.cppblog.com/vczh/archive/2009/03/02/75349.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Mon, 02 Mar 2009 12:45:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2009/03/02/75349.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/75349.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2009/03/02/75349.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/75349.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/75349.html</trackback:ping><description><![CDATA[A Crash Course on theDepths of Win32 Structured Exception Handling, MSJ January 1997<br><a style="TEXT-DECORATION: underline" href="http://www.microsoft.com/msj/0197/Exception/Exception.aspx" target=_blank>http://www.microsoft.com/msj/0197/Exception/Exception.aspx</a><br><br>对于结构化异常处理（SEH）的进一步探索（读后感）<br><a style="TEXT-DECORATION: underline" href="http://vicchina.51.net/research/other/seh/sehadvance.htm" target=_blank>http://vicchina.51.net/research/other/seh/sehadvance.htm</a><br><br>NT 中的异常帧结构和异常嵌套（读后感续）<br><a style="TEXT-DECORATION: underline" href="http://vicchina.51.net/show_article.php?id=65" target=_blank>http://vicchina.51.net/show_article.php?id=65</a> 
<img src ="http://www.cppblog.com/vczh/aggbug/75349.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2009-03-02 20:45 <a href="http://www.cppblog.com/vczh/archive/2009/03/02/75349.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JIT脚本引擎：stdcall、cdecl和fastcall</title><link>http://www.cppblog.com/vczh/archive/2009/03/01/75256.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Sun, 01 Mar 2009 13:27:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2009/03/01/75256.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/75256.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2009/03/01/75256.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/75256.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/75256.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: stdcall、cdecl和fastcall的参数都是从右到左入栈，并且返回值遵循以下规律：<br>小于等于4字节结构用EAX<br>小于等于8字节结构用EDX:EAX<br>浮点数用ST(0)<br>其他则在EAX放置一个指针，供返回值使用<br><br>stdcall被调用者清栈，cdecl调用者清栈，fastcall被调用者清栈并且前两个小于等于4字节的参数放入ECX和EDX。返回值和参数如果一方有构造函数或析构函数则不使用寄存器。<br>于是今天用字符串形式的汇编写了三种调用方法的求和函数：&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2009/03/01/75256.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/75256.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2009-03-01 21:27 <a href="http://www.cppblog.com/vczh/archive/2009/03/01/75256.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JIT脚本引擎：用汇编写了一个四则运算字符串分析程序</title><link>http://www.cppblog.com/vczh/archive/2009/02/27/75037.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Thu, 26 Feb 2009 17:05:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2009/02/27/75037.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/75037.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2009/02/27/75037.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/75037.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/75037.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 这个汇编程序读入一个字符串，并计算结果。支持加减乘除括号，不支持浮点数，不支持查错。以下是汇编以及注释。汇编程序使用这篇文章的程序编译并执行。&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2009/02/27/75037.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/75037.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2009-02-27 01:05 <a href="http://www.cppblog.com/vczh/archive/2009/02/27/75037.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JIT脚本引擎：动态运行文本格式的汇编代码</title><link>http://www.cppblog.com/vczh/archive/2009/02/26/74996.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Thu, 26 Feb 2009 09:27:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2009/02/26/74996.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/74996.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2009/02/26/74996.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/74996.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/74996.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 今天完成了文本格式汇编代码的编译工作。这主要是为了调试，因为编译器不可能产生文本格式的汇编代码，这样会很浪费资源。翻译过程如下：&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2009/02/26/74996.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/74996.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2009-02-26 17:27 <a href="http://www.cppblog.com/vczh/archive/2009/02/26/74996.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JIT脚本引擎：完成链接器的核心功能</title><link>http://www.cppblog.com/vczh/archive/2009/02/23/74672.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Mon, 23 Feb 2009 06:41:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2009/02/23/74672.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/74672.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2009/02/23/74672.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/74672.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/74672.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要:     光能编译汇编还是不行的，因为很多东西在编译的时候不知道，典型的比如放常量那部分的指针等等。主要原因还是因为x87（指FPU部分）没有指令包含浮点立即数，所有装载浮点常数的指令都要求提供指针。所以诸如double a=1.2;之类的代码，需要将1.2预先放置在一个地方然后确定指针的位置。<br><br>    于是就遇到了一个问题，如何将编译后才知道的指针地址写进去呢？&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2009/02/23/74672.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/74672.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2009-02-23 14:41 <a href="http://www.cppblog.com/vczh/archive/2009/02/23/74672.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JIT脚本引擎：将汇编语言编译成机器码写进内存并在C++中调用</title><link>http://www.cppblog.com/vczh/archive/2009/02/22/74622.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Sun, 22 Feb 2009 15:08:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2009/02/22/74622.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/74622.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2009/02/22/74622.html#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/74622.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/74622.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要:     在完成了这里和这里的工作之后，就可以写程序生成机器码了。在生成机器码的时候有如下注意事项：<br><br>    1：可执行代码所在的空间必须使用VirtualAlloc与PAGE_EXECUTE_READWRITE标记分配。<br>    2：程序需要的常量空间、全局变量空间和指令空间需要分开在三个不同的地方。<br><br>    下面的例子使用一个struct保存指令的每一个部分，并且结合之前产生的指令译码表生成二进制码。&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2009/02/22/74622.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/74622.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2009-02-22 23:08 <a href="http://www.cppblog.com/vczh/archive/2009/02/22/74622.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JIT脚本引擎：识别需要使用66H前缀区分的相同opcode指令的16位版本和32位版本</title><link>http://www.cppblog.com/vczh/archive/2009/02/17/74030.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Tue, 17 Feb 2009 05:53:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2009/02/17/74030.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/74030.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2009/02/17/74030.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/74030.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/74030.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 关于这个问题实在没有一个特别好的方法，基本方法还是来源于对intel手册的观察。因为指令表是从手册上面复制出来的，但是上面又没有标明66H前缀，怎么办呢？人肉找规律。这里贴出了区分的代码（进对于之前挑选出来的绝大多数x86与x87指令）以及生成后的一个很有规则的文件以供参考。&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2009/02/17/74030.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/74030.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2009-02-17 13:53 <a href="http://www.cppblog.com/vczh/archive/2009/02/17/74030.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JIT脚本引擎：将汇编指令转换为机器码</title><link>http://www.cppblog.com/vczh/archive/2009/02/16/73937.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Mon, 16 Feb 2009 07:45:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2009/02/16/73937.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/73937.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2009/02/16/73937.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/73937.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/73937.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 完整的转换方法需要intel提供免费翻印下载的那本手册。手册过于精简，因此这里给出的例子用于辅助对手册进行理解。假设读者阅读过intel提供的手册，或其他相关资料。&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2009/02/16/73937.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/73937.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2009-02-16 15:45 <a href="http://www.cppblog.com/vczh/archive/2009/02/16/73937.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JIT脚本引擎：x86子集汇编二进制码表整理完成</title><link>http://www.cppblog.com/vczh/archive/2009/02/15/73854.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Sun, 15 Feb 2009 04:21:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2009/02/15/73854.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/73854.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2009/02/15/73854.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/73854.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/73854.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 为了节省工作量，我打开intel的手册，然后将那些框框里面的字符串复制到一个文本文件里面，最后写一个C++程序用正则表达式处理。流程如下（含代码和文件）：&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2009/02/15/73854.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/73854.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2009-02-15 12:21 <a href="http://www.cppblog.com/vczh/archive/2009/02/15/73854.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>新计划出炉：含JIT的脚本引擎</title><link>http://www.cppblog.com/vczh/archive/2009/02/14/73778.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Sat, 14 Feb 2009 05:18:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2009/02/14/73778.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/73778.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2009/02/14/73778.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/73778.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/73778.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; JIT是just in time，一门包含了JIT的脚本引擎就是将脚本编译成机器码，让CPU而不是自己写的虚拟机运行。这样做有助于提供高速的运行环境、以及与C++更加方便的融合。这次计划所需要的任务如下：<br><br>&nbsp;&nbsp;&nbsp; 汇编器。汇编器指的是可以做如下转变的一个工具：机器码 &lt;--&gt; 汇编程序的数据结构 &lt;--&gt; 汇编程序文本表示。有了三个可以互相转换的结构之后，编译器可以在更高层的层面上开发，调试也变得更加容易。<br><br>&nbsp;&nbsp;&nbsp; 中间指令。由于x86的指令集过于复杂，并且以后可能会发生重大变更，因此有必要开发一个容易使用的、功能简洁但是强大的另一个指令集，提供中间指令到汇编的单向转换操作。这主要是用来解决x86指令互相之间操作不够统一、寄存器分配和更好的x86指令选择等问题，并且可以让以后的编译器更加容易开发。<br><br>&nbsp;&nbsp;&nbsp; 内存管理器。由于汇编是不处理内存申请释放等操作的，因此需要将内存管理器，连同垃圾收集器，一起封装成函数供汇编代码调用。这个内存管理器届时将使用C#和Java均验证过的多代收集方法。如果语言不直接操作指针的话，还能提供压缩操作。<br><br>&nbsp;&nbsp;&nbsp; 基本语言。基本语言拥有绝大多数的没有重复的必要的基础设施，并提供基本语言到中间指令的单向转换操作。<br><br>&nbsp;&nbsp;&nbsp; 脚本语言。当然基本语言如果足够强大的话也能变成一门脚本。这里指的脚本是类似DSL那样有特殊目的语言。编译器所需要的词法分析器可以大部分交给我开发的VL++2.0的Syngram负责，并且编译成基本语言。以后制作DSL将会变得非常简单。<br><br>&nbsp;&nbsp;&nbsp; 汇编器是体力活，因此我想了一个办法。Intel手册上的指令集的二进制码表还是写得相当有规律的，因此可以复制下来集中到一起（已完成），然后使用正则表达式进行第一步处理，将码表、语法和说明三部分分开成更加合理的格式，然后再用一个正则表达式进行处理，最后生成记载着翻译方法的C++代码。等这一部分完成之后，可能会给出相关的代码，并且解释x86在32位下的详细的指令格式。64位等购买新电脑并安装win7之后才开始，目前没有条件。 
<img src ="http://www.cppblog.com/vczh/aggbug/73778.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2009-02-14 13:18 <a href="http://www.cppblog.com/vczh/archive/2009/02/14/73778.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>