﻿<?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++博客-tiny vm</title><link>http://www.cppblog.com/NightAway/</link><description /><language>zh-cn</language><lastBuildDate>Sat, 11 Apr 2026 21:20:46 GMT</lastBuildDate><pubDate>Sat, 11 Apr 2026 21:20:46 GMT</pubDate><ttl>60</ttl><item><title>Neo Virtual Machine Design</title><link>http://www.cppblog.com/NightAway/archive/2015/02/11/209787.html</link><dc:creator>NightAway</dc:creator><author>NightAway</author><pubDate>Wed, 11 Feb 2015 01:17:00 GMT</pubDate><guid>http://www.cppblog.com/NightAway/archive/2015/02/11/209787.html</guid><wfw:comment>http://www.cppblog.com/NightAway/comments/209787.html</wfw:comment><comments>http://www.cppblog.com/NightAway/archive/2015/02/11/209787.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/NightAway/comments/commentRss/209787.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/NightAway/services/trackbacks/209787.html</trackback:ping><description><![CDATA[<strong>1.设计</strong><br />
&nbsp; &nbsp;64个通用寄存器分别编号为0 - 63，用@符号代表寄存器，那么第一个寄存器就为@0。<br />&nbsp; &nbsp;内存地址位宽为64位，起始地址0x0000 0000 0000 0000,结束地址0xFFFF FFFF FFFF FFFF。<br />
<br />
<strong>2.指令集<br />
</strong>&nbsp; &nbsp;mov&nbsp;<br />
&nbsp; &nbsp;mov @0, 1<br />&nbsp; &nbsp;mov [0x0000 0000 0000 0000], @0&nbsp;<br />
<br />
&nbsp; &nbsp;add<br />
&nbsp; &nbsp;add @0, 2<br />
&nbsp; &nbsp;<br />&nbsp; &nbsp;example0:<br />&nbsp; &nbsp;1+2+3<br />&nbsp; &nbsp;mov @0, 1<br />&nbsp; &nbsp;add @0, 2<br />&nbsp; &nbsp;add @0, 3<br /><br /><img src ="http://www.cppblog.com/NightAway/aggbug/209787.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/NightAway/" target="_blank">NightAway</a> 2015-02-11 09:17 <a href="http://www.cppblog.com/NightAway/archive/2015/02/11/209787.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JIT Compiler in Action 第一节 : 跑通最基本的例子</title><link>http://www.cppblog.com/NightAway/archive/2015/02/06/209752.html</link><dc:creator>NightAway</dc:creator><author>NightAway</author><pubDate>Fri, 06 Feb 2015 02:22:00 GMT</pubDate><guid>http://www.cppblog.com/NightAway/archive/2015/02/06/209752.html</guid><wfw:comment>http://www.cppblog.com/NightAway/comments/209752.html</wfw:comment><comments>http://www.cppblog.com/NightAway/archive/2015/02/06/209752.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/NightAway/comments/commentRss/209752.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/NightAway/services/trackbacks/209752.html</trackback:ping><description><![CDATA[<h3>目的：需要跑通的例子<br /></h3><div style="padding: 4px 5px 4px 4px; font-size: 13px; border: 1px solid #cccccc; width: 1327.890625px; word-break: break-all; background-color: #eeeeee;">1 + 2</div><div><br />&nbsp;&nbsp;&nbsp;这个例子是最简单的表达式，我们需要经过词法解析，语法解析， 生成中间代码，最后生成机器代码这四步。<br /><strong><br />一. 词法解析<br /></strong>&nbsp; &nbsp;词法解析很简单，输入 "1 + 2" 的字符串，输出则为独立的Token：1，+ 和 2 。<br /><br /><strong>二. 语法解析<br /></strong>&nbsp; &nbsp;语法解析阶段输入为上个阶段的Token，输出则为抽象语法树。<br />&nbsp; &nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/nightaway/QQ%E5%9B%BE%E7%89%8720150206100633.png" width="487" height="255" alt="" /><br /><strong>三. 生成中间代码<br /></strong>&nbsp; &nbsp;这一阶段我们需要将上个阶段的抽象语法树生成为类似Intel汇编语言的中间代码。<br />&nbsp; &nbsp;mov eax, 1<br />&nbsp; &nbsp;add eax, 2<br /><br /><strong>四. 生成机器代码</strong><br />&nbsp; &nbsp;最后则是将中间代码翻译成x86机器代码。<br />&nbsp; &nbsp;B8 01 00 00 00<br />&nbsp; &nbsp;83C0 02<br /></div><img src ="http://www.cppblog.com/NightAway/aggbug/209752.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/NightAway/" target="_blank">NightAway</a> 2015-02-06 10:22 <a href="http://www.cppblog.com/NightAway/archive/2015/02/06/209752.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Unicode版本和ANSI版本中CreateProcess的区别</title><link>http://www.cppblog.com/NightAway/archive/2007/07/31/29057.html</link><dc:creator>NightAway</dc:creator><author>NightAway</author><pubDate>Tue, 31 Jul 2007 01:15:00 GMT</pubDate><guid>http://www.cppblog.com/NightAway/archive/2007/07/31/29057.html</guid><wfw:comment>http://www.cppblog.com/NightAway/comments/29057.html</wfw:comment><comments>http://www.cppblog.com/NightAway/archive/2007/07/31/29057.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/NightAway/comments/commentRss/29057.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/NightAway/services/trackbacks/29057.html</trackback:ping><description><![CDATA[<p>1.ANSI<br>在ANSI版本下CreateProcess被映射为CreateProcessA,只需要少量参数就可以调用这个API,比如:</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">&nbsp;&nbsp;TCHAR&nbsp;szAppName[_MAX_PATH]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;_T(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">iexplore.exe</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">IE浏览器程序</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">2</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;TCHAR&nbsp;szCmdLine[_MAX_PATH]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;_T(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">http://www.cppblogs.com</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">3</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;CreateProcessA(szAppName,szCmdLine,&nbsp;NULL,&nbsp;NULL,FALSE,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;NULL,&nbsp;NULL,&nbsp;NULL,&nbsp;NULL);</span></div>
<p><br><br>2.Unicode<br>在Unicode版本下CreateProcess被映射为CreateProcessW,最少也需要3个参数,否则就失败,比如:</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">TCHAR&nbsp;szAppName[_MAX_PATH]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;_T(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">iexplore.exe</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">IE浏览器程序</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">TCHAR&nbsp;szCmdLine[_MAX_PATH]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;_T(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">http://www.cppblogs.com</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;STARTUPINFO&nbsp;startupinfo;<br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;startupinfo.cb&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(STARTUPINFO);<br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;ZeroMemory(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">startupinfo,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(startupinfo));<br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;PROCESS_INFORMATION&nbsp;&nbsp;processinfo;<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;ZeroMemory(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">processinfo,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(processinfo));<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;CreateProcesssW(zAppName,szCmdLine,NULL,NULL,NULL,&nbsp;NULL,NULL,NULL,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">startupinfo,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">processinfo);<br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<p><br>&nbsp;</p>
<img src ="http://www.cppblog.com/NightAway/aggbug/29057.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/NightAway/" target="_blank">NightAway</a> 2007-07-31 09:15 <a href="http://www.cppblog.com/NightAway/archive/2007/07/31/29057.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>我编写的第一个游戏..</title><link>http://www.cppblog.com/NightAway/archive/2007/03/15/19869.html</link><dc:creator>NightAway</dc:creator><author>NightAway</author><pubDate>Thu, 15 Mar 2007 02:54:00 GMT</pubDate><guid>http://www.cppblog.com/NightAway/archive/2007/03/15/19869.html</guid><wfw:comment>http://www.cppblog.com/NightAway/comments/19869.html</wfw:comment><comments>http://www.cppblog.com/NightAway/archive/2007/03/15/19869.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/NightAway/comments/commentRss/19869.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/NightAway/services/trackbacks/19869.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;接触计算机编程大概快有两年了吧，从C，C++，C#和JAVA 最后又回到了C++，感觉C++ 比Java和C#更适合我，因为我喜欢C++ 的底层开发，能掌控更多对计算机的控制权，但是比起C#和Java的快速软件开发，C++还是没有明显优势，C++的复杂程度也远比C#和JAVA高的多，学校里大部分教的都是应用编程，B/S程序写的多一点，但是我的心中一直有个梦想，那就是从事游戏软件开发，但是一直入不了门，1年前学C++时候也看过一些DirectX的书籍，总是入不了门.又经过了一年多的磨练，虽然编的大多数都是B/S的程序,但是软件开发的思想总是相通的,当我再次拿起以前书籍 ,以前不懂的地方都一下子全都能理解了。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;由于之前没学过Win32 SDK编程 MFC也没学过，所以就又找了一本从基础开始讲的书.&lt;&lt;Windows游戏编程大师技巧&gt;&gt;.这本书从Win32 SDK编程到DirectX7.0的DirectDraw.Direct8.0的DirectInput，DirectSound 和DirectMusic,然后到2D 数学和物理,游戏的一些基本算法都一 一详细的讲解，这本书用来入门还是不错的，虽然微软从DX8.0开始就将DirectDraw和Direct3D合并成了DirectGraphics，之后再也没更新过DirectDraw，但是我认为DirectDraw做为入门还是很不错的，首先能稳固一下2D的数学知识，这些2D知识对于3D来说就是基础，理解DirectX的缓冲链也是很重要的。看完了第7章后经过一个月的努力，用自己的思维编写了这本书的一个简单的游戏Demo，虽然说很简单 但是对游戏软件开发总算有了一点点新的认识.。<br><br><br><a href="http://www.cppblog.com/Files/NightAway/MyFirstGame.rar">Demo Beta 0.1下载</a></p>
<img src ="http://www.cppblog.com/NightAway/aggbug/19869.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/NightAway/" target="_blank">NightAway</a> 2007-03-15 10:54 <a href="http://www.cppblog.com/NightAway/archive/2007/03/15/19869.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>