<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_老李的地下室</title><subtitle type="text">艰难地走在操作系统开发的道路上</subtitle><id>http://feed.cnblogs.com/blog/u/45748/rss</id><updated>2012-05-10T01:07:20Z</updated><author><name>Hundre</name><uri>http://www.cnblogs.com/li0803/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/li0803/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/45748/rss"/><entry><id>http://www.cnblogs.com/li0803/archive/2012/03/05/2329158.html</id><title type="text">Cosmos动手练习（基于里程碑2的代码）--.net/C#开源操作系统学习系列十</title><summary type="text">直接开始吧，在KenelTest文件夹下面添加一个自己的项目，这里我的项目是PCIDeviceEnumerator，列出当前自己机子上的PCI设备的VendorID和DeviceID以及设备类型</summary><published>2012-03-05T04:33:00Z</published><updated>2012-03-05T04:33:00Z</updated><author><name>Hundre</name><uri>http://www.cnblogs.com/li0803/</uri></author><link rel="alternate" href="http://www.cnblogs.com/li0803/archive/2012/03/05/2329158.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/li0803/archive/2012/03/05/2329158.html"/><content type="html">&lt;script type="text/javascript"&gt;&lt;!--google_ad_client = "ca-pub-4688426012213630";/* Word Ad 468&amp;#42;60 */google_ad_slot = "1989664125";google_ad_width = 468;google_ad_height = 60;//--&gt;&lt;/script&gt;&lt;script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;&lt;/script&gt;&lt;p&gt;直接开始吧，在KenelTest文件夹下面添加一个自己的项目，这里我的项目是PCIDeviceEnumerator，列出当前自己机子上的PCI设备的VendorID和DeviceID以及设备类型&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/li0803/201201/201201241424498829.png"&gt;&lt;img style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline;background-image: none;" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/li0803/201201/201201241424572397.png" width="329" height="292" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;敲入如下代码：&lt;/p&gt;&lt;p&gt;using System;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;using System.Text;&lt;br /&gt;using Cosmos.Build;&lt;br /&gt;using Cosmos.Hardware.PC;&lt;/p&gt;&lt;p&gt;namespace PCIDeviceEnumerator&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; class Program&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //这个是项目的启动函数&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#ff0000"&gt;[STAThread]&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; static void Main(string[] args)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //在里程碑2中，COSMOS项目还需要自己调用编译器对自己进行编译，生成最后的ISO，并调用模拟器启动我们自己的操作系统&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var xbuilder = new Cosmos.Build.Windows.Builder();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xbuilder.Build();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //这个是操作系统的入口函数，操作系统就从这里开始进入我们的代码的&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static void Init()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Cosmos.Kernel.Boot.Default();//操作系统初始化，详细解释可以参看下小弟之前的拙文&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var DeviceCollect = Cosmos.Hardware.PC.Bus.PCIBus.Devices;//获取机子上所有的PCI设备&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //遍历设备，并列出VendorID和DeviceID以及设备类型&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (var device in DeviceCollect)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(device.VendorID + " | " + device.DeviceID + " | "+ device.GetClassInfo());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/p&gt;&lt;p&gt;以下是这次动手练习中遇到的一些问题下面一个个解释：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/li0803/201201/20120124142503200.png"&gt;&lt;img style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline;background-image: none;" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/li0803/201201/201201241425126767.png" width="672" height="282" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;上图：可以看到代码中红色的部分，对于项目的启动函数需要加上STAThread属性，由错误提示可知，一些UI组件需要STA，这里摘录一段网上对STAThread的解释&lt;/p&gt;&lt;p&gt;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&lt;/p&gt;&lt;p&gt;[STAThread]&lt;br /&gt;是一种线程模型，用在程序的入口方法上（在C#和VB.NET里是Main()方法），来指定当前线程的ApartmentState 是STA。用在其他方法上不产生影响。在aspx页面上可以使用&lt;strong&gt;AspCompat = "true"&lt;/strong&gt; 来达到同样的效果。这个属性只在 Com Interop 有用，如果全部是 managed code 则无用。简单的说法:[STAThread]指示应用程序的默认线程模型是单线程单元 (STA)。启动线程模型可设置为单线程单元或多线程单元。如果未对其进行设置，则该线程不被初始化。也就是说如果你用的.NET Framework，并且没有使用COM Interop，一般不需要这个Attribute。其它的还有MTA（多线程套间）、Free Thread（自由线程）。&lt;p&gt;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&lt;p&gt;对于这个的解释，我们先看一下下面的这个UI界面，有项目类型可知这是一个WPF的项目，个人理解，由于项目的界面调用到了一些COM的组件来进行绘制或者需要和某些COM组件来进行交互，所以我们自己创建的项目的启动函数里面需要加上STAThread属性。&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/li0803/201201/201201241425156437.png"&gt;&lt;img style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline;background-image: none;" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/li0803/201201/201201241425191514.png" width="506" height="474" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;现在看下图的这个错误，提示在XXXXXX目录下找不到XXXXX.dll文件，我们在结合上图，留意到&amp;#8220;Current build path is:&amp;#8220;这个属性，这里指定了在编译过程中需要用到的程序集的路径，现在的这个是在编译器启动时的默认值，我们需要把它修改成我们需要的值（注：目前这个路径只支持英文名）&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/li0803/201201/201201241425217936.png"&gt;&lt;img style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline;background-image: none;" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/li0803/201201/201201241425322320.png" width="618" height="416" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;我们在启动编译器的界面项目中可以找到如下代码，位于Cosmos.Build.Windows项目的BuildRegister.cs文件中。&lt;/p&gt;&lt;p&gt;public static class BuildRegistry&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static void Write(string key, string value)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RegistryKey xKey = Registry.CurrentUser.CreateSubKey(@"Software\Cosmos");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xKey.SetValue(key, value);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static string Read(string key)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RegistryKey xKey = Registry.CurrentUser.OpenSubKey(@"Software\Cosmos");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return (string)xKey.GetValue(key);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return null;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;这里在注册表中写入了一条记录，其实这就是Current build path is:属性的默认值，找到该记录把它的值改成我们项目生成的地址，通常我们的项目生成之后所在的目录一般为：XXXXXX\bin\debug\&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/li0803/201201/201201241425353385.png"&gt;&lt;img style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline;background-image: none;" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/li0803/201201/201201241425396926.png" width="625" height="257" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;这下我们就可以通过编译了，操作系统启动之后会列出本机上的所有PCI设备的VendorID和DeviceID以及设备类型，由下图我们可以知道，小弟的机子上有：&lt;/p&gt;&lt;p&gt;一个PCI桥（用来在CPU和PCI之间进行通信）&lt;/p&gt;&lt;p&gt;还有一个PCI桥（用来在PCI和ISA之间进行通信--不知道ISA的朋友百度一下吧，一种比较古老的总线）&lt;/p&gt;&lt;p&gt;一个IDE硬盘&lt;/p&gt;&lt;p&gt;还是一个PCI桥（但是小弟做的这个操作系统无法识别，个人觉得应该是用来在PCI和USB之间进行通信的）&lt;/p&gt;&lt;p&gt;一个VGA显示卡（就是显卡）&lt;/p&gt;&lt;p&gt;一个以太网卡&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/li0803/201201/201201241425436214.png"&gt;&lt;img style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline;background-image: none;" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/li0803/201201/201201241425468708.png" width="632" height="378" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;好了，练习完毕，&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;最后还是广告时间，大家懂的：&lt;/p&gt;&lt;p&gt;欢迎大家经常光顾小弟的淘宝充值店：&lt;a href="http://hundre.taobao.com/"&gt;http://hundre.taobao.com/&lt;/a&gt;&lt;p&gt;好了，多谢大家捧场 &lt;img alt="微笑" src="http://images.cnblogs.com/cnblogs_com/li0803/201109/20110928173609440.png" /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/li0803/aggbug/2329158.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/li0803/archive/2012/03/05/2329158.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/li0803/archive/2012/01/16/2323242.html</id><title type="text">Cosmos的里程碑2（Mile Stone 2）之浅尝PCI总线、设备编程--.net/C#开源操作系统学习系列九</title><summary type="text">访问PCI配置空间可通过两个访问寄存器，CONFIG_ADDRESS寄存器和CONFIG_DATA寄存器。这两个寄存器在PC中分别对应着CF8h和CFCh端口，并且是32位端口，即读写要用的32为IN和OUT汇编指令。当然Cosmos已经对汇编指令进行了封装，我们就不需要直接对汇编指令进行操作了，直接调用即可。</summary><published>2012-01-16T00:22:00Z</published><updated>2012-01-16T00:22:00Z</updated><author><name>Hundre</name><uri>http://www.cnblogs.com/li0803/</uri></author><link rel="alternate" href="http://www.cnblogs.com/li0803/archive/2012/01/16/2323242.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/li0803/archive/2012/01/16/2323242.html"/><content type="html">&lt;p&gt;书接上文（这两篇文章之间隔得有点久，唉，最近工作比较忙，加上基础不够，学习PCI知识花了不少时间），话说在上一篇中，我们直接使用系统提供的类来获取了RTL8139网卡的类，这一篇我们就来一起学习COSMOS是如何找到网卡芯片并实例化相应的类的。&lt;/p&gt;&lt;script type="text/javascript"&gt;&lt;!--google_ad_client = "ca-pub-4688426012213630";/* Word Ad 468&amp;#42;60 */google_ad_slot = "1989664125";google_ad_width = 468;google_ad_height = 60;//--&gt;&lt;/script&gt;&lt;script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;&lt;/script&gt;&lt;p&gt;直接来到RTL8139Test这个类下，定位到语句List&amp;lt;Cosmos.Driver.RTL8139.RTL8139&amp;gt; nics = Cosmos.Driver.RTL8139.RTL8139.FindRTL8139Devices();上一篇中我们直接跳过了这个语句，这次就进入到FindRTL8139Devices()方法里面，看看这个方法是如何找到PCI上的RTL8139网卡的。进入到方法的代码里面&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt;&amp;nbsp;List&amp;lt;RTL8139&amp;gt;&amp;nbsp;FindRTL8139Devices()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List&amp;lt;RTL8139&amp;gt;&amp;nbsp;found&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&amp;nbsp;List&amp;lt;RTL8139&amp;gt;();&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;foreach&lt;/span&gt;&amp;nbsp;(PCIDevice&amp;nbsp;device&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;in&lt;/span&gt;&amp;nbsp;Cosmos.Hardware.PC.Bus.PCIBus.Devices)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&amp;nbsp;(device.VendorID&amp;nbsp;==&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;0x10EC&lt;/span&gt;&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;device.DeviceID&amp;nbsp;==&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;0x8139&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;found.Add(&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&amp;nbsp;RTL8139(device));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&amp;nbsp;found;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;/div&gt;&lt;p&gt;可以看到该方法是通过遍历PCI总线上的所有设备然后比较设备的VendorID和DeviceID来确认遍历到的设备是不是我们要找的RTL8139网卡。这里的VendorID和DeviceID都是PCI规范中规定厂家必须要实现的参数（除非哪家厂子不想让自己的产品卖不出去），其中VendorID是由PCI SIG（貌似是叫做PCI标准组织）规定的，可以在&lt;a href="http://www.pcisig.com/"&gt;http://www.pcisig.com/&lt;/a&gt; 这个网站查找到所有获得该组织授权的生产产商的ID，而DeviceID是由生产厂商自己规定的一个编号，用来识别自己生产的不同产品。这里的10EC就是realtek公司的编号，8139就是这家公司生产的网卡芯片的编号。在这里再附上PCI 3.0标准的文档&amp;nbsp;&lt;a href="http://files.cnblogs.com/li0803/PCI局部总线开发指南.pdf"&gt;中文版&lt;/a&gt;&amp;nbsp;&lt;a href="http://files.cnblogs.com/li0803/PCI.Local.Bus.Specification.Revision.3.0.pdf"&gt;英文原版&lt;/a&gt; （个人觉得中文版翻译得实在不咋地，英文过得去的强烈图推荐直接看英文版），文档其中对我们编程有用的只有第六章的内容，其他的都可以忽略。&lt;/p&gt;&lt;p&gt;好接下来我们再来学习PCI总线类（PCIBus）是如何获得所有PCI设备的，首先我们准备点预备知识，通过资料我们可以找到下面一幅图（左边的为中文文档的翻译，右边的是英文原版，SubsystemID和Subsystem Vendor ID居然都被忽略掉了，所谓的&amp;#8220;信达雅&amp;#8221;&amp;#8230;&amp;#8230;唉，不吐槽了）：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/li0803/201201/201201160821192226.png"&gt;&lt;img style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline;background-image: none;" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/li0803/201201/201201160821205408.png" width="443" height="509" /&gt;&lt;/a&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/li0803/201201/201201160821286251.png"&gt;&lt;img style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline;background-image: none;" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/li0803/201201/201201160821294450.png" width="360" height="509" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;这里加上点个人见解，Status应译为状态寄存器，Command应译为命令寄存器，DeviceID是设备识别代码（就少两个字，少引两个字会死人吗）&lt;/p&gt;&lt;p&gt;这是Header Type为00H的PCI设备的，配置空间中的头部区域中各个寄存器在内存中的排列规范（这里的寄存器已不是传统意义上的CPU中的寄存器了，而是内容中从特定位置右特定长度的一段内存），关于这些寄存器字段的详细说明文档中都有，在此就不献丑了。要说的是&amp;#8220;配置空间&amp;#8221;这个说法个人感觉应该是针对硬件产商来说的，应该是硬件厂商在生产他们自己的PCI设备，在设备出厂前就应该完成对这部分空间的配置，而我们程序员只需从内容中读取出这些信息来辅助我们编程实现功能即可。预备知识到此结束，下面来看下PCIBus类中的代码（代码比较长，就把分析写在代买的注释里面吧，为节省篇幅，也删除了部分不必要的代码和注释）：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;class&lt;/span&gt;&amp;nbsp;PCIBus&amp;nbsp;:&amp;nbsp;Cosmos.Hardware.Bus.PCIBus&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;先是Devices该属性，可以看到在上一层的代码中，RTL81139的驱动程序类就是通过遍历这个集合来确定它要找的设备的&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;该集合直接势力化了一个PCIDevice设备的数组，我们看到这里初始化的时候这个数组只有0个元素，这样的话怎么可能能找得出设备呢？&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;/*&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;现在我们倒回去一下，还记得我们选择的启动项目的program.cs文件里面的第一条语句吗：Cosmos.Kernel.Boot.Default();在Default()方法里面调用了Cosmos.Hardware.PC.Global.Init();方法，而该方法有调用了方法HW.PC.Bus.PCIBus.Init();啊哈，这个就是我们这个类的初始化方法。这样，在我们获取Devcies数据之前，已经对数组完成了新的初始化，把所有的PCI设备都添加进去了。好，接下来我们直接到Init()方法里面看个究竟&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt;&amp;nbsp;PCIDevice[]&amp;nbsp;Devices&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&amp;nbsp;PCIDevice[&lt;span style="color: rgb(128, 0, 128);"&gt;0&lt;/span&gt;];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;bool&lt;/span&gt;&amp;nbsp;haveEnumerated&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;false&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt;&amp;nbsp;PCIDevice&amp;nbsp;GetPCIDevice(&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;&amp;nbsp;bus,&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;&amp;nbsp;slot,&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;&amp;nbsp;function)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&amp;nbsp;(!haveEnumerated)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Init();&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;foreach&lt;/span&gt;&amp;nbsp;(PCIDevice&amp;nbsp;dev&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;in&lt;/span&gt;&amp;nbsp;PCIBus.Devices)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&amp;nbsp;(dev.Bus&amp;nbsp;==&amp;nbsp;bus&amp;nbsp;&amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dev.Slot&amp;nbsp;==&amp;nbsp;slot&amp;nbsp;&amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dev.Function&amp;nbsp;==&amp;nbsp;function)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&amp;nbsp;dev;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;null&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;该方法直接调用EnumerateBus(byte&amp;nbsp;Bus,&amp;nbsp;ref&amp;nbsp;List&amp;lt;PCIDevice&amp;gt;&amp;nbsp;Devices)方法来查找系统中的PCI设备，此处ref&amp;nbsp;Bus参数不知是什么东西，求解?&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt;&amp;nbsp;Init()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;Console.WriteLine("Cosmos.Hardware.PC.Bus.Init()");&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List&amp;lt;PCIDevice&amp;gt;&amp;nbsp;devices&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&amp;nbsp;List&amp;lt;PCIDevice&amp;gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;Console.WriteLine("-&amp;nbsp;created&amp;nbsp;generic");&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;EnumerateBus(&lt;span style="color: rgb(128, 0, 128);"&gt;0&lt;/span&gt;,&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;ref&lt;/span&gt;&amp;nbsp;devices);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Devices&amp;nbsp;=&amp;nbsp;devices.ToArray();&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;haveEnumerated&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;true&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;遍历本机上的所有PCI设备，遍历到的设备存储到参数Devices中&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt;&amp;nbsp;EnumerateBus(&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;&amp;nbsp;Bus,&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;ref&lt;/span&gt;&amp;nbsp;List&amp;lt;PCIDevice&amp;gt;&amp;nbsp;Devices)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;for&lt;/span&gt;&amp;nbsp;(&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;&amp;nbsp;xSlot&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;0&lt;/span&gt;;&amp;nbsp;xSlot&amp;nbsp;&amp;lt;&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;32&lt;/span&gt;;&amp;nbsp;xSlot++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;&amp;nbsp;xMaxFunctions&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;1&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;for&lt;/span&gt;&amp;nbsp;(&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;&amp;nbsp;xFunction&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;0&lt;/span&gt;;&amp;nbsp;xFunction&amp;nbsp;&amp;lt;&amp;nbsp;xMaxFunctions;&amp;nbsp;xFunction++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;这里先初始化一个普通的PCI设备，然后再通过读取设备中的参数来确定是不是我们想要的设备&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;/*&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;求高人指点此处Bus,xSlot,xFunction的意思，xSlot个人认为应该是插槽的数量，由于是32位的系统，所以是可以有32个插槽，然后逐个遍历，但是其他两个参数的话&amp;#8230;&amp;#8230;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;以下部分请参考下面的关于PCIDevice类的学习&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PCIDevice&amp;nbsp;xPCIDevice&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&amp;nbsp;PCIDeviceNormal(Bus,&amp;nbsp;xSlot,&amp;nbsp;xFunction);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&amp;nbsp;(xPCIDevice.DeviceExists)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&amp;nbsp;(xPCIDevice.HeaderType&amp;nbsp;==&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;2&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;/*&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;PCIHeaderType.Cardbus&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;*/&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xPCIDevice&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&amp;nbsp;PCIDeviceCardBus(Bus,&amp;nbsp;xSlot,&amp;nbsp;xFunction);&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&amp;nbsp;(xPCIDevice.HeaderType&amp;nbsp;==&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;/*&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;PCIHeaderType.Bridge&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;*/&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xPCIDevice&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&amp;nbsp;PCIDeviceBridge(Bus,&amp;nbsp;xSlot,&amp;nbsp;xFunction);&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Devices.Add(xPCIDevice);&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&amp;nbsp;(xPCIDevice&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;is&lt;/span&gt;&amp;nbsp;PCIDeviceBridge)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;EnumerateBus(((PCIDeviceBridge)xPCIDevice).SecondaryBus,&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;ref&lt;/span&gt;&amp;nbsp;Devices);&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&amp;nbsp;(xPCIDevice.IsMultiFunction)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xMaxFunctions&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;8&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;貌似是调试用的一段代码，此次分析中没用到，也忽略之&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt;&amp;nbsp;DebugLSPCI()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;#8230;&amp;#8230;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;/div&gt;&lt;p&gt;呼，终于能从代买里面出来一会了，从上面的代码中我们新发现了三个类PCIDevice, PCIDeviceNormal, PCIDeviceBridge。后面两个其实都是从PCIDevice中继承而来，基本没有自己的代码，主要看一下PCIDevice这个类（好长，看得我头晕晕眼花花，同样删除了不分不必要的代码和注释）：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;/*由构造函数得到，在这里PCI设备的创建就是配置了几个参数，仔细阅读代码之后可以发现，这里基本上都是从PCI设备中读取设备的参数，这可能是因为这个为PCI设备通用的抽象类，所实现的还只是些PCI设备通用的功能，例如读取所有PCI设备都必须实现的一些参数。*/&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;abstract&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;class&lt;/span&gt;&amp;nbsp;PCIDevice&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;abstract&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt;&amp;nbsp;NumberOfBaseAddresses();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;[]&amp;nbsp;classtext&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;[]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;pre&amp;nbsp;pci&amp;nbsp;2.0&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;00&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;disk&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;01&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;network&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;02&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;display&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;03&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;multimedia&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;04&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;memory&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;05&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;bridge&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;06&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;communication&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;07&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;system&amp;nbsp;peripheral&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;,&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;08&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;input&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;09&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;docking&amp;nbsp;station&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;0A&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;CPU&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;0B&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;serial&amp;nbsp;bus&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;0C&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;[][]&amp;nbsp;subclasstext&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;[][]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;[]&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;VGA&amp;nbsp;Device&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;non&amp;nbsp;VGA&amp;nbsp;device&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;[]&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;SCSI&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&amp;nbsp;,&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;IDE&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&amp;nbsp;,&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;floppy&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;,&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;IPI&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;,&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;RAID&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;other&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&amp;nbsp;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;[]&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Ethernet&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;TokenRing&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;FDDI&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&amp;nbsp;,&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;ATM&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&amp;nbsp;,&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;other&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&amp;nbsp;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;[]&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;VGA&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;SuperVGA&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;,&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;XGA&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;other&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;[]&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;video&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&amp;nbsp;,&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;audio&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;other&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;[]&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;RAM&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Flash&amp;nbsp;memory&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&amp;nbsp;,&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;other&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;[]&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;CPU/PCI&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&amp;nbsp;,&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;PCI/ISA&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&amp;nbsp;,&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;PCI/EISA&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&amp;nbsp;,&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;PCI/MCA&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;,&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;PCI/PCI&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&amp;nbsp;,&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;PCI/PCMCIA&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;PCI/NuBus&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;PCI/CardBus&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;other&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;[]&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;serial&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;parallel&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;other&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;[]&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;PIC&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;DMAC&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&amp;nbsp;,&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;timer&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&amp;nbsp;,&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;RTC&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;other&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;[]&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;keyboard&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;,&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;digitizer&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;,&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;mouse&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;other&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&amp;nbsp;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;[]&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;generic&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&amp;nbsp;,&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;other&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&amp;nbsp;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;[]&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;386&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;486&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;,&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Pentium&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&amp;nbsp;,&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;P6&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&amp;nbsp;,&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Alpha&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;,&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;coproc&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;,&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;other&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&amp;nbsp;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;[]&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Firewire&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;ACCESS.bus&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&amp;nbsp;,&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;SSA&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;USB&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&amp;nbsp;,&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Fiber&amp;nbsp;Channel&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&amp;nbsp;,&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;other&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;/*&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;获取设备的分类信息，从代码中可以看到使用了ClassCode,&amp;nbsp;SubClass这两个字段，参考这两个字段的代码可以发现都是使用ReadX方法把数据从配置空间中读取出来，这里的ReadX方法放到下面再说&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;&amp;nbsp;GetClassInfo()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt;&amp;nbsp;cc&amp;nbsp;=&amp;nbsp;ClassCode;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt;&amp;nbsp;sc&amp;nbsp;=&amp;nbsp;SubClass;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&amp;nbsp;(cc&amp;nbsp;&amp;gt;=&amp;nbsp;classtext.Length)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;unknown&amp;nbsp;class&amp;nbsp;(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&amp;nbsp;+&amp;nbsp;cc.ToString()&amp;nbsp;+&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;)&amp;nbsp;/&amp;nbsp;subclass&amp;nbsp;(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&amp;nbsp;+&amp;nbsp;sc.ToString()&amp;nbsp;+&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&amp;nbsp;(sc&amp;nbsp;&amp;gt;=&amp;nbsp;subclasstext[cc].Length)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&amp;nbsp;String.Concat(classtext[cc],&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;&amp;nbsp;/&amp;nbsp;unknown&amp;nbsp;subclass&amp;nbsp;(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;,&amp;nbsp;sc.ToString(),&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&amp;nbsp;String.Concat(&amp;nbsp;classtext[cc]&amp;nbsp;,&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;&amp;nbsp;/&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&amp;nbsp;,&amp;nbsp;subclasstext[cc][sc]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;PCI&amp;nbsp;3.0规范中定义的一些PCI设备使用的参数&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;const&lt;/span&gt;&amp;nbsp;UInt32&amp;nbsp;PCI_BASE_ADDRESS_SPACE&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;0x01&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;/*&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;0&amp;nbsp;=&amp;nbsp;memory,&amp;nbsp;1&amp;nbsp;=&amp;nbsp;I/O&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;const&lt;/span&gt;&amp;nbsp;UInt32&amp;nbsp;PCI_BASE_ADDRESS_SPACE_IO&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;0x01&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;const&lt;/span&gt;&amp;nbsp;UInt32&amp;nbsp;PCI_BASE_ADDRESS_SPACE_MEMORY&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;0x00&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;const&lt;/span&gt;&amp;nbsp;UInt32&amp;nbsp;PCI_BASE_ADDRESS_MEM_TYPE_MASK&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;0x06&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;const&lt;/span&gt;&amp;nbsp;UInt32&amp;nbsp;PCI_BASE_ADDRESS_MEM_TYPE_32&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;0x00&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;/*&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;32&amp;nbsp;bit&amp;nbsp;address&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;const&lt;/span&gt;&amp;nbsp;UInt32&amp;nbsp;PCI_BASE_ADDRESS_MEM_TYPE_1M&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;0x02&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;/*&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;Below&amp;nbsp;1M&amp;nbsp;[obsolete]&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;const&lt;/span&gt;&amp;nbsp;UInt32&amp;nbsp;PCI_BASE_ADDRESS_MEM_TYPE_64&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;0x04&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;/*&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;64&amp;nbsp;bit&amp;nbsp;address&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;const&lt;/span&gt;&amp;nbsp;UInt32&amp;nbsp;PCI_BASE_ADDRESS_MEM_PREFETCH&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;0x08&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;/*&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;prefetchable?&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;*/&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;const&lt;/span&gt;&amp;nbsp;UInt32&amp;nbsp;PCI_BASE_ADDRESS_MEM_MASK&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;0xfffffff0&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;const&lt;/span&gt;&amp;nbsp;UInt32&amp;nbsp;PCI_BASE_ADDRESS_IO_MASK&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;0xfffffffc&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;构造函数，给一些参数赋值&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;protected&lt;/span&gt;&amp;nbsp;PCIDevice(&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;&amp;nbsp;bus,&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;&amp;nbsp;slot,&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;&amp;nbsp;function)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;this&lt;/span&gt;.Bus&amp;nbsp;=&amp;nbsp;bus;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;this&lt;/span&gt;.Slot&amp;nbsp;=&amp;nbsp;slot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;this&lt;/span&gt;.Function&amp;nbsp;=&amp;nbsp;function;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;bool&lt;/span&gt;&amp;nbsp;NeedsIO&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;false&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;bool&lt;/span&gt;&amp;nbsp;NeedsMemory&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;false&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;bool&lt;/span&gt;&amp;nbsp;_NeedsLayingout&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;true&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;IO布局，惭愧，真不知道这段是用来干什么的，还好分析的代码里面好像没有对该函数进行的调用&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt;&amp;nbsp;LayoutIO()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;Console.WriteLine("Checking&amp;nbsp;AdressSpaces&amp;nbsp;of&amp;nbsp;PCI("&amp;nbsp;+&amp;nbsp;Bus&amp;nbsp;+&amp;nbsp;",&amp;nbsp;"&amp;nbsp;+&amp;nbsp;Slot&amp;nbsp;+&amp;nbsp;",&amp;nbsp;"&amp;nbsp;+&amp;nbsp;Function&amp;nbsp;+&amp;nbsp;")");&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IOMaps&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&amp;nbsp;AddressSpace[NumberOfBaseAddresses()];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;for&lt;/span&gt;&amp;nbsp;(&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;&amp;nbsp;i&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;0&lt;/span&gt;;&amp;nbsp;i&amp;nbsp;&amp;lt;&amp;nbsp;NumberOfBaseAddresses();&amp;nbsp;i++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UInt32&amp;nbsp;address&amp;nbsp;=&amp;nbsp;GetBaseAddress(i);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SetBaseAddress(i,&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;0xffffffff&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UInt32&amp;nbsp;flags&amp;nbsp;=&amp;nbsp;GetBaseAddress(i);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SetBaseAddress(i,&amp;nbsp;address);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&amp;nbsp;(address&amp;nbsp;==&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;0&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;Console.WriteLine("register&amp;nbsp;"&amp;nbsp;+&amp;nbsp;i&amp;nbsp;+&amp;nbsp;"&amp;nbsp;-&amp;nbsp;none&amp;nbsp;"&amp;nbsp;+&amp;nbsp;PCIBus.ToHex(flags,8));&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IOMaps[i]&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;null&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;else&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&amp;nbsp;((address&amp;nbsp;&amp;amp;&amp;nbsp;PCI_BASE_ADDRESS_SPACE)&amp;nbsp;==&amp;nbsp;PCI_BASE_ADDRESS_SPACE_MEMORY)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UInt32&amp;nbsp;size&amp;nbsp;=&amp;nbsp;~(PCI_BASE_ADDRESS_MEM_MASK&amp;nbsp;&amp;amp;&amp;nbsp;flags)+&lt;span style="color: rgb(128, 0, 128);"&gt;1&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IOMaps[i]&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&amp;nbsp;MemoryAddressSpace(address,&amp;nbsp;size);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;Console.WriteLine("register&amp;nbsp;"&amp;nbsp;+&amp;nbsp;i&amp;nbsp;+&amp;nbsp;"&amp;nbsp;-&amp;nbsp;"&amp;nbsp;+&amp;nbsp;size&amp;nbsp;+&amp;nbsp;"b&amp;nbsp;mem");&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NeedsIO&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;true&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;else&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&amp;nbsp;((address&amp;nbsp;&amp;amp;&amp;nbsp;PCI_BASE_ADDRESS_SPACE)&amp;nbsp;==&amp;nbsp;PCI_BASE_ADDRESS_SPACE_IO)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UInt32&amp;nbsp;size&amp;nbsp;=&amp;nbsp;~(PCI_BASE_ADDRESS_IO_MASK&amp;nbsp;&amp;amp;&amp;nbsp;flags)&amp;nbsp;+&lt;span style="color: rgb(128, 0, 128);"&gt;1&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IOMaps[i]&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&amp;nbsp;IOAddressSpace(address,&amp;nbsp;size);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;Console.WriteLine("register&amp;nbsp;"&amp;nbsp;+&amp;nbsp;i&amp;nbsp;+&amp;nbsp;"&amp;nbsp;-&amp;nbsp;"&amp;nbsp;+&amp;nbsp;size&amp;nbsp;+&amp;nbsp;"b&amp;nbsp;io");&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NeedsMemory&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;true&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_NeedsLayingout&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;false&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;private&lt;/span&gt;&amp;nbsp;AddressSpace[]&amp;nbsp;IOMaps;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;AddressSpace&amp;nbsp;GetAddressSpace(&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;&amp;nbsp;index)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&amp;nbsp;(index&amp;nbsp;&amp;lt;&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;0&lt;/span&gt;&amp;nbsp;||&amp;nbsp;index&amp;nbsp;&amp;gt;=&amp;nbsp;NumberOfBaseAddresses())&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;throw&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&amp;nbsp;ArgumentOutOfRangeException(&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;index&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&amp;nbsp;(_NeedsLayingout)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LayoutIO();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&amp;nbsp;IOMaps[index];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;&amp;nbsp;Bus&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;set&lt;/span&gt;;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;&amp;nbsp;Slot&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;set&lt;/span&gt;;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;&amp;nbsp;Function&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;set&lt;/span&gt;;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;bool&lt;/span&gt;&amp;nbsp;DeviceExists&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&amp;nbsp;VendorID&amp;nbsp;!=&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;0xFFFF&lt;/span&gt;&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;VendorID&amp;nbsp;!=&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;0x0&lt;/span&gt;;&amp;nbsp;}&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;bool&lt;/span&gt;&amp;nbsp;IsMultiFunction&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&amp;nbsp;(Read8(&lt;span style="color: rgb(128, 0, 128);"&gt;0x0e&lt;/span&gt;)&amp;nbsp;&amp;amp;&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;0xf0&lt;/span&gt;)&amp;nbsp;!=&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;0&lt;/span&gt;;&amp;nbsp;}&amp;nbsp;}&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //以下为各种字段的定义，可以看到读取的地址参数都和上面两张布局截图中的地址编号相对应&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;UInt32&amp;nbsp;VendorID&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&amp;nbsp;Read16(&lt;span style="color: rgb(128, 0, 128);"&gt;0x0&lt;/span&gt;);&amp;nbsp;}&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;UInt16&amp;nbsp;DeviceID&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&amp;nbsp;Read16(&lt;span style="color: rgb(128, 0, 128);"&gt;0x2&lt;/span&gt;);&amp;nbsp;}&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;PCICommand&amp;nbsp;Command&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&amp;nbsp;(PCICommand)Read16(&lt;span style="color: rgb(128, 0, 128);"&gt;0x4&lt;/span&gt;);&amp;nbsp;}&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;set&lt;/span&gt;&amp;nbsp;{&amp;nbsp;Write16(&lt;span style="color: rgb(128, 0, 128);"&gt;0x4&lt;/span&gt;,&amp;nbsp;(&lt;span style="color: rgb(0, 0, 255);"&gt;ushort&lt;/span&gt;)value);&amp;nbsp;}&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;PCIStatus&amp;nbsp;Status&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&amp;nbsp;(PCIStatus)Read16(&lt;span style="color: rgb(128, 0, 128);"&gt;0x6&lt;/span&gt;);&amp;nbsp;}&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;set&lt;/span&gt;&amp;nbsp;{&amp;nbsp;Write16(&lt;span style="color: rgb(128, 0, 128);"&gt;0x6&lt;/span&gt;,&amp;nbsp;(&lt;span style="color: rgb(0, 0, 255);"&gt;ushort&lt;/span&gt;)value);&amp;nbsp;}&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;&amp;nbsp;RevisionID&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&amp;nbsp;Read8(&lt;span style="color: rgb(128, 0, 128);"&gt;0x8&lt;/span&gt;);&amp;nbsp;}&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;&amp;nbsp;ProgIF&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&amp;nbsp;Read8(&lt;span style="color: rgb(128, 0, 128);"&gt;0x9&lt;/span&gt;);&amp;nbsp;}&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;&amp;nbsp;SubClass&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&amp;nbsp;Read8(&lt;span style="color: rgb(128, 0, 128);"&gt;0xa&lt;/span&gt;);&amp;nbsp;}&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;&amp;nbsp;ClassCode&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&amp;nbsp;Read8(&lt;span style="color: rgb(128, 0, 128);"&gt;0xb&lt;/span&gt;);&amp;nbsp;}&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;&amp;nbsp;CacheLineSize&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&amp;nbsp;Read8(&lt;span style="color: rgb(128, 0, 128);"&gt;0x0c&lt;/span&gt;);&amp;nbsp;}&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;set&lt;/span&gt;&amp;nbsp;{&amp;nbsp;Write8(&lt;span style="color: rgb(128, 0, 128);"&gt;0x0c&lt;/span&gt;,&amp;nbsp;value);&amp;nbsp;}&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;&amp;nbsp;LatencyTimer&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&amp;nbsp;Read8(&lt;span style="color: rgb(128, 0, 128);"&gt;0x0d&lt;/span&gt;);&amp;nbsp;}&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;set&lt;/span&gt;&amp;nbsp;{&amp;nbsp;Write8(&lt;span style="color: rgb(128, 0, 128);"&gt;0x0d&lt;/span&gt;,&amp;nbsp;value);&amp;nbsp;}&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;&amp;nbsp;HeaderType&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&amp;nbsp;(&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;)(Read8(&lt;span style="color: rgb(128, 0, 128);"&gt;0x0e&lt;/span&gt;)&amp;nbsp;&amp;amp;&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;0xf&lt;/span&gt;);&amp;nbsp;}&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;PCIBist&amp;nbsp;Bist&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&amp;nbsp;(PCIBist)Read8(&lt;span style="color: rgb(128, 0, 128);"&gt;0x0f&lt;/span&gt;);&amp;nbsp;}&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;set&lt;/span&gt;&amp;nbsp;{&amp;nbsp;Write8(&lt;span style="color: rgb(128, 0, 128);"&gt;0x0f&lt;/span&gt;,&amp;nbsp;(&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;)value);&amp;nbsp;}&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;UInt32&amp;nbsp;GetBaseAddress(&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;&amp;nbsp;index)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&amp;nbsp;Read32((&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;)(&lt;span style="color: rgb(128, 0, 128);"&gt;0x10&lt;/span&gt;&amp;nbsp;+&amp;nbsp;index&amp;nbsp;*&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;4&lt;/span&gt;));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt;&amp;nbsp;SetBaseAddress(&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;&amp;nbsp;index,&amp;nbsp;UInt32&amp;nbsp;value)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Write32((&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;)(&lt;span style="color: rgb(128, 0, 128);"&gt;0x10&lt;/span&gt;&amp;nbsp;+&amp;nbsp;index&amp;nbsp;*&lt;span style="color: rgb(128, 0, 128);"&gt;4&lt;/span&gt;),&amp;nbsp;value);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;UInt32&amp;nbsp;BaseAddress0&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&amp;nbsp;Read32(&lt;span style="color: rgb(128, 0, 128);"&gt;0x10&lt;/span&gt;);&amp;nbsp;}&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;set&lt;/span&gt;&amp;nbsp;{&amp;nbsp;Write32(&lt;span style="color: rgb(128, 0, 128);"&gt;0x10&lt;/span&gt;,&amp;nbsp;value);&amp;nbsp;}&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;UInt32&amp;nbsp;BaseAddress1&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&amp;nbsp;Read32(&lt;span style="color: rgb(128, 0, 128);"&gt;0x14&lt;/span&gt;);&amp;nbsp;}&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;set&lt;/span&gt;&amp;nbsp;{&amp;nbsp;Write32(&lt;span style="color: rgb(128, 0, 128);"&gt;0x14&lt;/span&gt;,&amp;nbsp;value);&amp;nbsp;}&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;&amp;nbsp;InterruptLine&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&amp;nbsp;Read8(&lt;span style="color: rgb(128, 0, 128);"&gt;0x3c&lt;/span&gt;);&amp;nbsp;}&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;set&lt;/span&gt;&amp;nbsp;{&amp;nbsp;Write8(&lt;span style="color: rgb(128, 0, 128);"&gt;0x3c&lt;/span&gt;,&amp;nbsp;value);&amp;nbsp;}&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;&amp;nbsp;InterruptPin&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&amp;nbsp;Read8(&lt;span style="color: rgb(128, 0, 128);"&gt;0x3d&lt;/span&gt;);&amp;nbsp;}&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;set&lt;/span&gt;&amp;nbsp;{&amp;nbsp;Write8(&lt;span style="color: rgb(128, 0, 128);"&gt;0x3d&lt;/span&gt;,&amp;nbsp;value);&amp;nbsp;}&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;&amp;nbsp;MinGNT&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&amp;nbsp;Read8(&lt;span style="color: rgb(128, 0, 128);"&gt;0x3e&lt;/span&gt;);&amp;nbsp;}&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;set&lt;/span&gt;&amp;nbsp;{&amp;nbsp;Write8(&lt;span style="color: rgb(128, 0, 128);"&gt;0x3e&lt;/span&gt;,&amp;nbsp;value);&amp;nbsp;}&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;&amp;nbsp;MaxLAT&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&amp;nbsp;Read8(&lt;span style="color: rgb(128, 0, 128);"&gt;0x3f&lt;/span&gt;);&amp;nbsp;}&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;set&lt;/span&gt;&amp;nbsp;{&amp;nbsp;Write8(&lt;span style="color: rgb(128, 0, 128);"&gt;0x3f&lt;/span&gt;,&amp;nbsp;value);&amp;nbsp;}&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //访问PCI配置空间可通过两个访问寄存器，CONFIG_ADDRESS寄存器和CONFIG_DATA寄存器。这两个寄存器在PC中分别对应着CF8h和CFCh端口&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;protected&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;const&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;ushort&lt;/span&gt;&amp;nbsp;ConfigAddr&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;0xCF8&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;protected&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;const&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;ushort&lt;/span&gt;&amp;nbsp;ConfigData&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;0xCFC&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt;&amp;nbsp;DisableDevice()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Command&amp;nbsp;=&amp;nbsp;Command&amp;nbsp;&amp;amp;&amp;nbsp;(~PCICommand.IO&amp;nbsp;&amp;amp;&amp;nbsp;~PCICommand.Master&amp;nbsp;&amp;amp;&amp;nbsp;PCICommand.Memort);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt;&amp;nbsp;EnableDevice()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Command&amp;nbsp;=&amp;nbsp;Command&amp;nbsp;&amp;amp;&amp;nbsp;((NeedsIO&amp;nbsp;?&amp;nbsp;PCICommand.IO&amp;nbsp;:&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;0&lt;/span&gt;)&amp;nbsp;&amp;amp;&amp;nbsp;PCICommand.Master&amp;nbsp;&amp;amp;&amp;nbsp;(NeedsMemory&amp;nbsp;?&amp;nbsp;PCICommand.Memort&amp;nbsp;:&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;0&lt;/span&gt;));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;private&lt;/span&gt;&amp;nbsp;UInt32&amp;nbsp;GetAddress(&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;&amp;nbsp;aRegister)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&amp;nbsp;(UInt32)(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;Bits&amp;nbsp;23-16&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;((UInt32)Bus&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;16&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;Bits&amp;nbsp;15-11&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;(((UInt32)Slot&amp;nbsp;&amp;amp;&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;0x1F&lt;/span&gt;)&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;11&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;Bits&amp;nbsp;10-8&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;(((UInt32)Function&amp;nbsp;&amp;amp;&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;0x07&lt;/span&gt;)&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;8&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;Bits&amp;nbsp;7-0&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;((UInt32)aRegister&amp;nbsp;&amp;amp;&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;0xFF&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;Enable&amp;nbsp;bit&amp;nbsp;-&amp;nbsp;must&amp;nbsp;be&amp;nbsp;set&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;0x80000000&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;UInt32&amp;nbsp;Read32(&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;&amp;nbsp;aRegister)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CPUBus.Write32(ConfigAddr,&amp;nbsp;GetAddress(aRegister));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&amp;nbsp;CPUBus.Read32(ConfigData);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //........&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*此处为节省篇幅，省略源码中的一些各种ReadX和WriteX方法,其实这些函数都和这两个类似，只是读取和写入的位数不一样而已&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt;&amp;nbsp;Write8(&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;&amp;nbsp;aRegister,&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;&amp;nbsp;value)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CPUBus.Write32(ConfigAddr,&amp;nbsp;GetAddress(aRegister));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CPUBus.Write8(ConfigData,&amp;nbsp;value);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;/div&gt;&lt;p&gt;终于从PCIDevice中出来了，下面重点说一下Read8, Read32, Write8, Write32这几个函数，这里先来说说如何对PCI的配置空间进行访问，因为这几个函数都是用来读写配置空间的。访问PCI配置空间可通过两个访问寄存器，CONFIG_ADDRESS寄存器和CONFIG_DATA寄存器。这两个寄存器在PC中分别对应着CF8h和CFCh端口，并且是32位端口，即读写要用的32为IN和OUT汇编指令。当然Cosmos已经对汇编指令进行了封装，我们就不需要直接对汇编指令进行操作了，直接调用即可。&lt;/p&gt;&lt;p&gt;从源代码中也可以看到对PCI设备中各种寄存器的访问都是通过ReadX和WriteX方法配合完成的，跟进这两个方法之后，我们可以看到代码：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;class&lt;/span&gt;&amp;nbsp;CPUBus&amp;nbsp;:&amp;nbsp;Cosmos.Hardware.Bus.CPUBus&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;all&amp;nbsp;plugs&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt;&amp;nbsp;Write8(UInt16&amp;nbsp;aPort,&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;&amp;nbsp;aData)&amp;nbsp;{&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt;&amp;nbsp;Write16(UInt16&amp;nbsp;aPort,&amp;nbsp;UInt16&amp;nbsp;aData)&amp;nbsp;{&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt;&amp;nbsp;Write32(UInt16&amp;nbsp;aPort,&amp;nbsp;UInt32&amp;nbsp;aData)&amp;nbsp;{&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;&amp;nbsp;Read8(UInt16&amp;nbsp;aPort)&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;0&lt;/span&gt;;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt;&amp;nbsp;UInt16&amp;nbsp;Read16(UInt16&amp;nbsp;aPort)&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;0&lt;/span&gt;;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt;&amp;nbsp;UInt32&amp;nbsp;Read32(UInt16&amp;nbsp;aPort)&amp;nbsp;{&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;0&lt;/span&gt;;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;/div&gt;&lt;p&gt;可以看到没有任何实现代码，不过请注意注释中的//all plugs，这里所有的操作都被plug了（关于plug，请参考&lt;a href="http://www.cnblogs.com/li0803/archive/2011/08/11/2134369.html"&gt;本系列六&lt;/a&gt;，嘿嘿），由编译器完成实际的代码的生成操作。这样我们就明白了PCIBus这个类是怎么读出PCI设备中的VendorID和DeviceID的了。&lt;/p&gt;&lt;p&gt;好了，到这里这次对PCI粗浅的学习就算完了，下一篇文章中将会使用这次学习到的内容实际动手做个小程序，来遍历并显示小弟自己机子上的PCI设备的VendorID和DeviceID，欢迎大家继续期待。哇哈哈哈，当然这次有什么说得不对的地方也欢迎大家指出来&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;最后是广告时间，大家懂得&amp;#8230;&amp;#8230;&lt;/p&gt;&lt;p&gt;欢迎大家经常光顾小弟的淘宝充值店：&lt;a href="http://hundre.taobao.com/"&gt;http://hundre.taobao.com/&lt;/a&gt; &lt;/p&gt;&lt;p&gt;最后是多谢大家捧场 &lt;img class="wlEmoticon wlEmoticon-smile" alt="微笑" src="http://images.cnblogs.com/cnblogs_com/li0803/201109/20110928173609440.png" /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/li0803/aggbug/2323242.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/li0803/archive/2012/01/16/2323242.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/li0803/archive/2011/09/28/2194658.html</id><title type="text">Cosmos的里程碑2（Mile Stone 2）之RTL8139网卡芯片编程---- .net/C#开源操作系统学习系列八</title><summary type="text">启动RTL8139 发送0x00到config1（0x52）寄存器来设置LWAKE+LWPTN（这两个应该是针脚的名字）为高电平（to active high.）这一步是启动该设备的关键操作。 软复位 接下来我们应该做一次软复位来清理RX和TX缓冲区并设置所有东西回默认值。这一操作用来清除在通电启动时候仍然留在缓冲区或者寄存器中的垃圾。 发送0x01到Command寄存器（0x37）将会使RTL8139进入软复位。只要这个字节被发送过去，可以检查RST位来确认芯片是否完成复位。如果RST位为high(1)，那么复位仍在进行中。 另：在Qemu模拟器中有个小小的bug，如果在执行软复位前检查command寄存器，你可能会发现RST是high(1)。这时，尽管忽略它继续进行初始化操作。 初始化接收缓冲区 这一部分，我们将设置一段芯片地址位置为接收缓存的开始地址。一种方法是，定义个缓存变量并把这个变量地址发送到PBSTART寄存器（0x30），如： char rx_buffer[8192+16]; // declare the</summary><published>2011-09-28T09:50:00Z</published><updated>2011-09-28T09:50:00Z</updated><author><name>Hundre</name><uri>http://www.cnblogs.com/li0803/</uri></author><link rel="alternate" href="http://www.cnblogs.com/li0803/archive/2011/09/28/2194658.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/li0803/archive/2011/09/28/2194658.html"/><content type="html">&lt;p&gt;下载的源代码包为cosomos-16025.zip&lt;/p&gt;&lt;script type="text/javascript"&gt;&lt;!--google_ad_client = "ca-pub-4688426012213630";/* Word Ad 728&amp;#42;90 */google_ad_slot = "3216548052";google_ad_width = 728;google_ad_height = 90;//--&gt;&lt;/script&gt;&lt;script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;&lt;/script&gt;&lt;p&gt;从发布的时间上看，MS2和MS1的时间只差了2个月，比较明显的变化有在编译操作系统是出来了一个图形化的选择界面同时内核文件夹里面多了两个项目RL8139驱动和文件系统，其他的基本没啥大变化。&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/li0803/201109/201109281731092313.png"&gt;&lt;img style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline;background-image: none;" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/li0803/201109/201109281731234697.png" width="387" height="379" /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://images.cnblogs.com/cnblogs_com/li0803/201109/201109281731278728.png"&gt;&lt;img style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline;background-image: none;" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/li0803/201109/201109281731334197.png" width="248" height="294" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;接下来我们启动MS2看看，把启动项目设为FrodeTest，只有这个项目里面使用到了RL8139驱动，其他的项目和MS1中的基本一样。&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/li0803/201109/201109281731375786.png"&gt;&lt;img style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline;background-image: none;" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/li0803/201109/201109281731567360.png" width="242" height="319" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;先看一下Prgrom.cs里面的源代码（去掉了原文中的一些无用的注释）：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;using&lt;/span&gt;&amp;nbsp;System;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;using&lt;/span&gt;&amp;nbsp;Cosmos.Build.Windows;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;namespace&lt;/span&gt;&amp;nbsp;FrodeTest&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;class&lt;/span&gt;&amp;nbsp;Program&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;#region&lt;/span&gt;&amp;nbsp;Cosmos&amp;nbsp;Builder&amp;nbsp;logic&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;Most&amp;nbsp;users&amp;nbsp;wont&amp;nbsp;touch&amp;nbsp;this.&amp;nbsp;This&amp;nbsp;will&amp;nbsp;call&amp;nbsp;the&amp;nbsp;Cosmos&amp;nbsp;Build&amp;nbsp;tool&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[STAThread]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt;&amp;nbsp;Main(&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;[]&amp;nbsp;args)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;xBuilder&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&amp;nbsp;Builder();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xBuilder.Build();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;#endregion&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;Main&amp;nbsp;entry&amp;nbsp;point&amp;nbsp;of&amp;nbsp;the&amp;nbsp;kernel&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;This&amp;nbsp;is&amp;nbsp;the&amp;nbsp;playground&amp;nbsp;for&amp;nbsp;Frode&amp;nbsp;"Scalpel"&amp;nbsp;Lillerud.&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt;&amp;nbsp;Init()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cosmos.Kernel.Boot.Default();&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cosmos.Kernel.Staging.DefaultStageQueue&amp;nbsp;stages&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&amp;nbsp;Cosmos.Kernel.Staging.DefaultStageQueue();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;stages.Enqueue(&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&amp;nbsp;Cosmos.Kernel.Staging.Stages.KernelStage());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;stages.Run();&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;以上代码和MS1中的基本一样，就不说了&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;下面这三行应该是为了给多用户登陆做准备用的吧，可惜MS2目前还是个单进程单线程的程序，无法让多用户进行操作&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;总之这里实例化了一个用户，然后在加载一次会话，最后是run运行，跳到下一段代码块来分析run里面的代码&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Security.User&amp;nbsp;currentUser&amp;nbsp;=&amp;nbsp;Security.User.Authenticate(&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;frode&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;secret&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Shell.Session&amp;nbsp;currentSession&amp;nbsp;=&amp;nbsp;&amp;nbsp;Shell.Session.CreateSession(currentUser);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;currentSession.Run();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Test.RTL8139Test.RunTest();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Shutting&amp;nbsp;down&amp;nbsp;computer&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;while&lt;/span&gt;&amp;nbsp;(&lt;span style="color: rgb(0, 0, 255);"&gt;true&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;/div&gt;&lt;/div&gt;&amp;nbsp;&lt;p&gt;以下是run部分的代码：&lt;/p&gt;&lt;p&gt;这段代码用来响应用户输入的命令，可以看到这里里面包括了使用RTL8139网卡芯片来发送数据包的代码，其实就是调用RTL8139驱动程序提供的类和方法。其实MS2个人感觉主要是实现了对PCI设备的控制&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;internal&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt;&amp;nbsp;Run()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.Write(Prompt.LoadPrompt(xUser).PromptText());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;&amp;nbsp;command&amp;nbsp;=&amp;nbsp;Console.ReadLine();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cosmos.Driver.RTL8139.RTL8139&amp;nbsp;nic&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;null&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&amp;nbsp;(command.Equals(&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;exit&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;else&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&amp;nbsp;(command.Equals(&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;nic&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;获取PCI设备，下一篇文章再共同学习一下对PCI的编程控制&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cosmos.Hardware.PC.Bus.PCIDevice&amp;nbsp;pciNic&amp;nbsp;=&amp;nbsp;Cosmos.Hardware.PC.Bus.PCIBus.GetPCIDevice(&lt;span style="color: rgb(128, 0, 128);"&gt;0&lt;/span&gt;,&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;3&lt;/span&gt;,&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;0&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nic&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&amp;nbsp;Cosmos.Driver.RTL8139.RTL8139(pciNic);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nic.Enable();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Enabled&amp;nbsp;Network&amp;nbsp;card&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;else&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&amp;nbsp;(command.Equals(&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;send&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;这里调用网卡发送数据包其实也只是简单的使用了几个网卡驱动程序中提供出来的几个函数而已&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;数据包的格式是自己构造的，并没有遵循任何协议（比如TCP/IP）的标准&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cosmos.Driver.RTL8139.PacketHeader&amp;nbsp;head&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&amp;nbsp;Cosmos.Driver.RTL8139.PacketHeader(&lt;span style="color: rgb(128, 0, 128);"&gt;0xFF&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;[]&amp;nbsp;data&amp;nbsp;=&amp;nbsp;FrodeTest.Test.Mock.FakeBroadcastPacket.GetFakePacketAllHigh();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cosmos.Driver.RTL8139.Packet&amp;nbsp;packet&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&amp;nbsp;Cosmos.Driver.RTL8139.Packet(head,&amp;nbsp;data);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&amp;nbsp;(nic&amp;nbsp;==&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;null&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Enable&amp;nbsp;NIC&amp;nbsp;with&amp;nbsp;command&amp;nbsp;nic&amp;nbsp;first&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nic.Enable();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nic.EnableRecieve();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nic.EnableTransmit();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nic.Transmit(packet);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;else&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&amp;nbsp;(command.Equals(&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;reset&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nic.SoftReset();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nic.EnableTransmit();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nic.EnableRecieve();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;NIC&amp;nbsp;reset&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;else&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;No&amp;nbsp;such&amp;nbsp;systemcommand&amp;nbsp;or&amp;nbsp;application:&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&amp;nbsp;+&amp;nbsp;command);&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Run();&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;/div&gt;&lt;p&gt;好接下来就是分析RTL8139这个类了&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/li0803/201109/201109281731592013.png"&gt;&lt;img style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline;background-image: none;" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/li0803/201109/201109281732065190.png" width="250" height="283" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;可以看到，这个项目里面除了RTL8139这个类外还有其他一些文件，这些合起来构成了一个cosmos中RTL8139网卡的驱动程序。从代码中可以看到RTL8139继承自NetwordDevice，NetworkDevice继承自Device，Device继承自Hardware，虽然继承层次比较多，但并不复杂，各基类只是定义了一些接口用来规范和统一操作，其他的代码也并不多，基本一看就能明白。&lt;/p&gt;&lt;p&gt;在接下来继续讲解RTL8139这个驱动之前，得对RTL8139这个网卡有点了解（小弟百度了N也没找到多少关于RTL8139的编程资料，可能是百度技术还不够高，泪奔。最后找到了一篇英文的，这里自己翻译一下，希望大家能看懂）&lt;/p&gt;&lt;p&gt;****************************************************&lt;/p&gt;&lt;p&gt;原文地址（需要 fan qiang 访问）：&lt;a title="http://wiki.osdev.org/RTL8139" href="http://wiki.osdev.org/RTL8139"&gt;http://wiki.osdev.org/RTL8139&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;前言&lt;/strong&gt;&lt;p&gt;RTL8139通过寄存器（这里的寄存器应该指的是网卡上的寄存器）来进行配置。它的IO基址和IRQ号可以通过PCI配置信息获取。&lt;p&gt;&lt;strong&gt;寄存器&lt;/strong&gt;&lt;p&gt;以下是RTL8139使用的寄存器&lt;table style="color: rgb(0, 0, 0);" border="1" cellspacing="0" cellpadding="0"&gt;    &lt;tbody&gt;        &lt;tr&gt;            &lt;td&gt;            &lt;p&gt;&lt;strong&gt;Offset (from IO base)&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;            &lt;p&gt;&lt;strong&gt;相对于&lt;/strong&gt;&lt;strong&gt;IO&lt;/strong&gt;&lt;strong&gt;基址的偏移值&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;            &lt;/td&gt;            &lt;td&gt;            &lt;p&gt;&lt;strong&gt;Size&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;            &lt;p&gt;&lt;strong&gt;大小&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;            &lt;/td&gt;            &lt;td&gt;            &lt;p&gt;&lt;strong&gt;Name&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;            &lt;p&gt;&lt;strong&gt;名称&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;            &lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;            &lt;td&gt;            &lt;p&gt;0x00 &lt;/p&gt;            &lt;/td&gt;            &lt;td&gt;            &lt;p&gt;6 &lt;/p&gt;            &lt;/td&gt;            &lt;td&gt;            &lt;p&gt;MAC0-5&lt;/p&gt;            &lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;            &lt;td&gt;            &lt;p&gt;0x08 &lt;/p&gt;            &lt;/td&gt;            &lt;td&gt;            &lt;p&gt;8 &lt;/p&gt;            &lt;/td&gt;            &lt;td&gt;            &lt;p&gt;MAR0-7&lt;/p&gt;            &lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;            &lt;td&gt;            &lt;p&gt;0x30 &lt;/p&gt;            &lt;/td&gt;            &lt;td&gt;            &lt;p&gt;4 &lt;/p&gt;            &lt;/td&gt;            &lt;td&gt;            &lt;p&gt;RBSTART&lt;/p&gt;            &lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;            &lt;td&gt;            &lt;p&gt;0x37 &lt;/p&gt;            &lt;/td&gt;            &lt;td&gt;            &lt;p&gt;1 &lt;/p&gt;            &lt;/td&gt;            &lt;td&gt;            &lt;p&gt;CMD&lt;/p&gt;            &lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;            &lt;td&gt;            &lt;p&gt;0x3C &lt;/p&gt;            &lt;/td&gt;            &lt;td&gt;            &lt;p&gt;2 &lt;/p&gt;            &lt;/td&gt;            &lt;td&gt;            &lt;p&gt;IMR&lt;/p&gt;            &lt;/td&gt;        &lt;/tr&gt;        &lt;tr&gt;            &lt;td&gt;            &lt;p&gt;0x3E &lt;/p&gt;            &lt;/td&gt;            &lt;td&gt;            &lt;p&gt;2 &lt;/p&gt;            &lt;/td&gt;            &lt;td&gt;            &lt;p&gt;ISR&lt;/p&gt;            &lt;/td&gt;        &lt;/tr&gt;    &lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;（原文的表格不太简单了，更多寄存器信息请参考：&lt;a href="http://www.soiseek.cn/ETC/RTL8139/10.htm"&gt;http://www.soiseek.cn/ETC/RTL8139/10.htm&lt;/a&gt; ）&lt;p&gt;再附上RTL8139的datasheet（做硬件的应该很熟悉了，在此多谢下小弟做硬件的同事，不然还真不知道从datasheet中找资料）&lt;a href="http://files.cnblogs.com/li0803/RTL8139-datasheet.pdf"&gt;/Files/li0803/RTL8139-datasheet.pdf&lt;/a&gt;&lt;p&gt;&lt;strong&gt;编程手册&lt;/strong&gt;&lt;p&gt;&lt;strong&gt;启动RTL8139&lt;/strong&gt;&lt;p&gt;发送0x00到config1（0x52）寄存器来设置LWAKE+LWPTN（这两个应该是针脚的名字）为高电平（to active high.）这一步是启动该设备的关键操作。&lt;p&gt;&lt;strong&gt;软复位&lt;/strong&gt;&lt;p&gt;接下来我们应该做一次软复位来清理RX和TX缓冲区并设置所有东西回默认值。这一操作用来清除在通电启动时候仍然留在缓冲区或者寄存器中的垃圾。&lt;p&gt;发送0x01到Command寄存器（0x37）将会使RTL8139进入软复位。只要这个字节被发送过去，可以检查RST位来确认芯片是否完成复位。如果RST位为high(1)，那么复位仍在进行中。&lt;p&gt;另：在Qemu模拟器中有个小小的bug，如果在执行软复位前检查command寄存器，你可能会发现RST是high(1)。这时，尽管忽略它继续进行初始化操作。&lt;p&gt;初始化接收缓冲区&lt;p&gt;这一部分，我们将设置一段芯片地址位置为接收缓存的开始地址。一种方法是，定义个缓存变量并把这个变量地址发送到PBSTART寄存器（0x30），如：&lt;p&gt;char rx_buffer[8192+16]; &lt;em&gt;// declare the local buffer space (8k + header)&lt;/em&gt;&lt;p&gt;outportd(0x30, (unsigned long)rx_buffer); &lt;em&gt;// send dword memory location to RBSTART (0x30)&lt;/em&gt;&lt;p&gt;&lt;strong&gt;设置IMR+ISR&lt;/strong&gt;&lt;p&gt;Interrupt Mask 寄存器(IMR)和Interrupt Service寄存器(ISR)用来负责激活不同的IRQ。IMR的各个位和ISR的各个位排成一排来同步工作（The IMR bits line up with ISR bits to work in sync.）如果IMR的一个位为低电平 (low) ，则对应的ISR位将不会触发一个IRQ当这个IRQ的发生周期来到的时候（翻译得真拗口，自己都受不了。上原文吧：. If an IMR bit is low, then the corresponding ISR bit with never fire an IRQ when the time comes for it to happen）。IMR的位置为0x3C，ISR的位置为 0x3E。&lt;p&gt;要设置RTL8139为只接收Transmit OK(TOK) 和 Receive OK (ROK)中断的话，我们需要让IMR中的TOK位和ROK位为高电平而其他位为低电平。这样设置后，当TOK或者ROK中断请求发生时，就会触发一个IRQ（中断请求）。如：&lt;p&gt;outportw(0x3C, 0x0005); &lt;em&gt;// Sets the TOK and ROK bits high&lt;/em&gt;&lt;p&gt;另：当你处理一个中断时，你必须写入这个中断对应的位来重置它。文档（不知道什么文档，RTL8139的datasheet？）上说重置缓冲区为0的话读这个寄存器就够了而写入是没有任何效果的。这在QEMU中无效，估计在一些或者大部分硬件中也是如此。而且如果无效的话写入一个位也无妨。&lt;p&gt;01000101：确认。实际上，清理一个中断的唯一办法是写入这个中断。Datasheet上说读（reading）是你必须做的，但是这完全是错的。&lt;p&gt;&lt;strong&gt;配置接收缓冲区&lt;/strong&gt;&lt;p&gt;在期望见到一个数据包到来之前，你应该告诉RTL8139根据各种规则来接收数据包。这里的配置寄存器为RCR。&lt;p&gt;你可以开启不同的匹配规则：&lt;p&gt;AB &amp;#8211; Accept Broadcast: 允许广播数据包发送到MAC地址 FF：FF：FF：FF：FF：FF&lt;p&gt;AM &amp;#8211; Accept Multicast: 允许多播数据包&lt;p&gt;APM &amp;#8211; Accept Physical Match: 允许数据包被发送到NIC（网络接口卡？Network Interface Card）的MAC地址&lt;p&gt;AAP &amp;#8211; Accept All Packets: 允许所有数据包 （运行在 promiscuous模式下）&lt;p&gt;另外一个位----WRAP位，控制着接收缓冲区wrap around（环绕？不知如何翻译）的处理。&lt;p&gt;如果WRAP是0，RX缓冲区则被当作传统的环缓冲（ring buffer）处理；如果一个数据包被写入缓冲区结尾附近并且RTL8139知道你已经在它之前处理了（根据CAPR来判断是否被处理）这个被写入的数据，这个数据包将会在缓冲的开始继续（怎么觉得这句话有问题呢，求高手：if a packet is being written near the end of the buffer and the RTL8139 knows you've already handled data before this (thanks to CAPR), the packet will continue at the beginning of the buffer.）&lt;p&gt;如果WRAP是1，数据包的remainder将会被连续地写入（使实际的接收缓冲区溢出）这样它能被更有效地处理。这将意味着为了接收可能使缓冲区溢出的最大的数据包，接收缓冲需要额外的1500个字节。&lt;p&gt;你也可以在这里设置你的RX缓冲区的大小，尽管如此，如果你使用一个像之前描述的8K+16的缓冲，填0已经足够了。要是用WRAP=1的位的话，一个8K的缓冲实际上必须是8K+16+1500字节。例如：&lt;p&gt;outportl(0x44, 0xf | (1 &amp;lt;&amp;lt; 7)); &lt;em&gt;// (1 &amp;lt;&amp;lt; 7) is the WRAP bit, 0xf is AB+AM+APM+AAP&lt;/em&gt;&lt;em&gt;&lt;/em&gt;&lt;p&gt;&lt;strong&gt;开启接收和传送功能&lt;/strong&gt;&lt;p&gt;现在是时候设置RX和TX的功能了。这真的是小意思，在我看来，这个只应该在RTL8139的寄存器按照我们想要的配置完成后才来完成这部分内容。RE（Receiver Enabled）和TE（Transmitter Enabled）位都在Command寄存器（0x37）中。设置RE和TE真的很简单，但还是让我们来看一下。&lt;p&gt;为了允许RTL8139接收和传送数据包，RE和TE位必须设置成高电平。一旦这个设置完成，网卡就将同意数据包进出。如&lt;p&gt;outportb(0x37, 0x0C); &lt;em&gt;// Sets the RE and TE bits high&lt;/em&gt;&lt;p&gt;****************************************************&lt;/p&gt;&lt;p&gt;好了，有了上面RTL8139的编程知识后，我们在来理解Cosmos中RTL8139的驱动代码就容易很多了。来一起学习下几个比较重要的public函数。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;构造函数，由于RTL8139通过PCI总线进行通信，所以这里传入一个PCI设备类，然后是获取设备能进行读写的内存范围，最后用这段内存来实例化网卡的寄存器。&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;这里的寄存器应该和我们CPU汇编中使用的寄存器有点不太一样，这里虽然也是使用寄存器名字，但是读写寄存器还是读写内存，不同的寄存器对应的是不同的内存范围。&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;RTL8139(PCIDevice&amp;nbsp;device)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pciCard&amp;nbsp;=&amp;nbsp;device;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mem&amp;nbsp;=&amp;nbsp;device.GetAddressSpace(&lt;span style="color: rgb(128, 0, 128);"&gt;1&lt;/span&gt;)&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;as&lt;/span&gt;&amp;nbsp;MemoryAddressSpace;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;regs&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&amp;nbsp;MainRegister(mem);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;启动网卡，有前面翻译的文章中知道，启动网卡就是往config1寄存器中写入0x00&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;override&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;bool&lt;/span&gt;&amp;nbsp;Enable()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;regs.Config1&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;0x00&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;true&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;软复位，根据翻译的文章基本可以了解代码的内容了，不多解释&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt;&amp;nbsp;SoftReset()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Performing&amp;nbsp;software&amp;nbsp;reset&amp;nbsp;of&amp;nbsp;RTL8139&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;regs.ChipCmd&amp;nbsp;=&amp;nbsp;MainRegister.ChipCommandFlags.RST;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;while&lt;/span&gt;&amp;nbsp;(regs.ChipCmdTest(MainRegister.ChipCommandFlags.RST))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Reset&amp;nbsp;in&amp;nbsp;progress...&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Reset&amp;nbsp;Complete!&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;开启接收功能&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt;&amp;nbsp;EnableRecieve()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;regs.ChipCmd&amp;nbsp;=&amp;nbsp;MainRegister.ChipCommandFlags.TE;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;开启传送功能&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt;&amp;nbsp;EnableTransmit()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;regs.ChipCmd&amp;nbsp;=&amp;nbsp;MainRegister.ChipCommandFlags.TE;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;Early&amp;nbsp;TX&amp;nbsp;Threshold特指在传送开始前TX先进先出寄存器中的的临界值&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;bytecount不能超过2048（2K&amp;nbsp;字节）&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;bytecount是一个能被32整除的数&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;bytecount是0则NIC（网卡适配器，其实就是网卡）将使用8字节作为临界值&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt;&amp;nbsp;SetEarlyTxThreshold(&lt;span style="color: rgb(0, 0, 255);"&gt;uint&lt;/span&gt;&amp;nbsp;bytecount)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&amp;nbsp;(bytecount&amp;nbsp;!=&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;0&lt;/span&gt;&amp;nbsp;&amp;amp;&amp;nbsp;(bytecount&amp;nbsp;%&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;32&lt;/span&gt;&amp;nbsp;&amp;gt;&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;0&lt;/span&gt;))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;throw&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&amp;nbsp;ArgumentException(&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Early&amp;nbsp;TX&amp;nbsp;Threshold&amp;nbsp;must&amp;nbsp;be&amp;nbsp;0&amp;nbsp;or&amp;nbsp;dividable&amp;nbsp;by&amp;nbsp;32&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;Each&amp;nbsp;of&amp;nbsp;the&amp;nbsp;four&amp;nbsp;Transmit&amp;nbsp;Status&amp;nbsp;Descriptors&amp;nbsp;(TSD)&amp;nbsp;has&amp;nbsp;its&amp;nbsp;own&amp;nbsp;EarlyTxThreshold.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UInt32&amp;nbsp;address&amp;nbsp;=&amp;nbsp;pciCard.BaseAddress1&amp;nbsp;+&amp;nbsp;(&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;)MainRegister.Bit.RxEarlyCnt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IOSpace.Write8(address,&amp;nbsp;(&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;)bytecount);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;初始化接收缓冲区。RBSTART寄存器由4字节组成(0x30h&amp;nbsp;到&amp;nbsp;0x33h)，这4个字节应该包括将要保存数据的缓冲区地址&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt;&amp;nbsp;InitReceiveBuffer()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;[]&amp;nbsp;rxbuffer&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;[&lt;span style="color: rgb(128, 0, 128);"&gt;2048&lt;/span&gt;];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UInt32&amp;nbsp;address&amp;nbsp;=&amp;nbsp;pciCard.BaseAddress1&amp;nbsp;+&amp;nbsp;(&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;)MainRegister.Bit.RxBuf;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;把缓冲区的地址空间（就是一段地址）写入RBSTART&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;WriteAddressToPCI(&lt;span style="color: rgb(0, 0, 255);"&gt;ref&lt;/span&gt;&amp;nbsp;rxbuffer,&amp;nbsp;address);&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;RxBuffer&amp;nbsp;contains&amp;nbsp;address:&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&amp;nbsp;+&amp;nbsp;IOSpace.Read32(address));&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;传送指定的数据包&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;unsafe&lt;/span&gt;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt;&amp;nbsp;Transmit(Packet&amp;nbsp;packet)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;告诉PCI卡数据包中内容部分的地址.&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UInt32&amp;nbsp;address&amp;nbsp;=&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pciCard.BaseAddress1&amp;nbsp;+&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;)MainRegister.Bit.TSD0&amp;nbsp;+&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;I&amp;nbsp;think&amp;nbsp;this&amp;nbsp;should&amp;nbsp;be&amp;nbsp;TSAD0,&amp;nbsp;but&amp;nbsp;then&amp;nbsp;no&amp;nbsp;packet&amp;nbsp;is&amp;nbsp;sent...&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TransmitStatusDescriptor.GetCurrentTSDescriptor();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Address&amp;nbsp;of&amp;nbsp;TSAD0:&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&amp;nbsp;+&amp;nbsp;address);&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;[]&amp;nbsp;body&amp;nbsp;=&amp;nbsp;packet.PacketBody;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;WriteAddressToPCI(&lt;span style="color: rgb(0, 0, 255);"&gt;ref&lt;/span&gt;&amp;nbsp;body,&amp;nbsp;address);&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.Write(&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Data&amp;nbsp;in&amp;nbsp;Transmit&amp;nbsp;Status&amp;nbsp;Descriptor&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&amp;nbsp;+&amp;nbsp;TransmitStatusDescriptor.GetCurrentTSDescriptor()&amp;nbsp;+&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(IOSpace.Read32(address));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;就目前来看，TSDA0应该包含有数据的地址.&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;The&amp;nbsp;Data&amp;nbsp;pointed&amp;nbsp;to:&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&amp;nbsp;+&amp;nbsp;IOSpace.Read32(IOSpace.Read32(address)));&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;把传送状态设置为允许传送.&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TransmitStatusDescriptor&amp;nbsp;tsd&amp;nbsp;=&amp;nbsp;TransmitStatusDescriptor.Load(pciCard);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tsd.Size&amp;nbsp;=&amp;nbsp;body.Length;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Told&amp;nbsp;NIC&amp;nbsp;to&amp;nbsp;send&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&amp;nbsp;+&amp;nbsp;tsd.Size&amp;nbsp;+&amp;nbsp;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;&amp;nbsp;bytes.&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SetEarlyTxThreshold(&lt;span style="color: rgb(128, 0, 128);"&gt;1024&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Sending...&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tsd.ClearOWNBit();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TransmitStatusDescriptor.IncrementTSDescriptor();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;/div&gt;&lt;p&gt;这里解释一下，RTL8139中所谓的寄存器其实就是其自身对其自己已划分好的各个内存块的名称，操作不同的寄存器，其实就是操作不同的内存块。Cosmos中RTL8139的驱动还另外写了一些类来专门负责读写对应的寄存器，其实就是专门修改对应的内存地址段。里面的代码都比较简单，基本上都是对内存段的读写，就不说了&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/li0803/201109/201109281732073139.png"&gt;&lt;img style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline;background-image: none;" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/li0803/201109/201109281732175638.png" width="337" height="190" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;最后，我们来运行这个项目看看&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/li0803/201109/201109281735228217.png"&gt;&lt;img style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline;background-image: none;" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/li0803/201109/201109281736048526.png" width="738" height="442" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;运行了两个命令：nic和send,可以看到输出了一些和网卡相关的信息。不过在此寻求高人帮助：怎么检测本机的网卡是否是真的有数据发送出去。还有这里显示出来的MAC地址虽然是从硬件的配置信息用读取出来的，但和用ipconfig列出的本机的网卡的MAC不太一样，不确定这里的代码是否真的运行成功了。&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/li0803/201109/201109281736043443.png"&gt;&lt;img style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline;background-image: none;" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/li0803/201109/201109281736074575.png" width="821" height="45" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;好了，此次就写到这里吧，以上列出的代码中还有些PCIdevice，IOSpace之类的类没有涉及到，这些将留在下一篇对PCI总线的编程学习中和大家共享学习心得。&lt;/p&gt;&lt;p&gt;这次的好像有点长，希望写的东西大家能看得懂，也非常欢迎大家点评。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;接下来是广告时间，大家懂得&amp;#8230;&amp;#8230;&lt;/p&gt;&lt;p&gt;欢迎大家经常光顾小弟的淘宝充值店：&lt;a href="http://hundre.taobao.com/"&gt;http://hundre.taobao.com/&lt;/a&gt; &lt;/p&gt;&lt;p&gt;最后是多谢大家捧场 &lt;img class="wlEmoticon wlEmoticon-smile" alt="微笑" src="http://images.cnblogs.com/cnblogs_com/li0803/201109/20110928173609440.png" /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/li0803/aggbug/2194658.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/li0803/archive/2011/09/28/2194658.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/li0803/archive/2011/09/21/2184300.html</id><title type="text">Cosmos的汇编级调试器（翻译）---- .net/C#开源操作系统学习系列七</title><summary type="text">既然COSMOS使用C#来写的，为什么我们需要一个如此底层的调试？我们觉得很多用户可能只需要用到C#调试器。尽管如此，汇编级调试器对工作在编译器上的用户或者在直接和硬件交互的调试中的用户来说是一个很大的帮助。</summary><published>2011-09-21T09:52:00Z</published><updated>2011-09-21T09:52:00Z</updated><author><name>Hundre</name><uri>http://www.cnblogs.com/li0803/</uri></author><link rel="alternate" href="http://www.cnblogs.com/li0803/archive/2011/09/21/2184300.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/li0803/archive/2011/09/21/2184300.html"/><content type="html">&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;英文原文地址：&lt;/span&gt;&lt;a href="http://www.codeproject.com/KB/cs/CosmosAsmDebuggerPreview.aspx"&gt;http://www.codeproject.com/KB/cs/CosmosAsmDebuggerPreview.aspx&lt;/a&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;script type="text/javascript"&gt;&lt;!--google_ad_client = "ca-pub-4688426012213630";/* Word Ad 728&amp;#42;90 */google_ad_slot = "3216548052";google_ad_width = 728;google_ad_height = 90;//--&gt;&lt;/script&gt;&lt;script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;&lt;/script&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;前言&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;一些用户写信给我，问我要一些关于新&lt;/span&gt;&lt;font face="Calibri"&gt;Cosmsos X86 &lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;汇编级调试的信息。因为在这方面比较有兴趣，我写了这篇简短的文章。&lt;/span&gt;&lt;font face="Calibri"&gt;Cosmos&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;已经有了一个集成在&lt;/span&gt;&lt;font face="Calibri"&gt;Visual&lt;br /&gt;Studio&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;中用于调试&lt;/span&gt;&lt;font face="Calibri"&gt;C#&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;和&lt;/span&gt;&lt;font face="Calibri"&gt;VB.NET&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;代码的调试器。尽管如此，为了调试&lt;/span&gt;&lt;font face="Calibri"&gt;X86&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;汇编，用户需要依靠&lt;/span&gt;&lt;font face="Calibri"&gt;GDB&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;。&lt;/span&gt;&lt;font face="Calibri"&gt;Cosmos&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;也包括了部分&lt;/span&gt;&lt;font face="Calibri"&gt;GDB&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;前端，但是在&lt;/span&gt;&lt;font face="Calibri"&gt;IL&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;和&lt;/span&gt;&lt;font face="Calibri"&gt;C#&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;之间的链接阶段这些会丢失并且需要大量的&lt;/span&gt;&lt;font face="Calibri"&gt;mental parsing(&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;不知道啥意思&lt;/span&gt;&lt;font face="Calibri"&gt;).&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;font face="Times New Roman"&gt;&lt;br /&gt;&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;最后，我们希望扩展我们新的汇编调试器，这样以后将很少用到或者&lt;/span&gt;&lt;font face="Calibri"&gt;GDB&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;只有在一些很深入的调试如&lt;/span&gt;&lt;font face="Calibri"&gt;debug&lt;br /&gt;stub&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;才会使用。这个&lt;/span&gt;&lt;font face="Calibri"&gt;X86&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;调试器允许你在&lt;/span&gt;&lt;font face="Calibri"&gt;C#&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;中设置断点，然后查看&lt;/span&gt;&lt;font face="Calibri"&gt;IL&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;代码和&lt;/span&gt;&lt;font face="Calibri"&gt;X86&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;汇编以及寄存器。&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;font face="Times New Roman"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font face="Calibri"&gt;Cosmos&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;是什么？&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;（&lt;/span&gt;&lt;font face="Calibri"&gt;&amp;#8230;&amp;#8230;&amp;#8230;&amp;#8230;&amp;#8230;&amp;#8230;&amp;#8230;&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;此处省略文字若干，这部分内容已在其他系列文章中列出，这里就不写了）&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;font face="Times New Roman"&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;font face="Times New Roman"&gt;&lt;/font&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;使用汇编调试器&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoListParagraphCxSpFirst"&gt;&lt;span style="mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"&gt;&lt;span style="mso-list: Ignore;"&gt;&lt;font face="Calibri"&gt;1.&lt;/font&gt;&lt;span style='font: 7pt/normal "Times New Roman"; font-size-adjust: none; font-stretch: normal;'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;打开一个&lt;/span&gt;&lt;font face="Calibri"&gt;Cosmos&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;工具窗口&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Times New Roman"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/li0803/assemblydebugger.jpg" width="600" height="760" /&gt;&lt;/p&gt;&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;目前（翻译这篇文章的时候最新更新包为&lt;/span&gt;&lt;font face="Calibri"&gt;83843&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;），只有汇编和寄存器窗口能工作。栈和帧（&lt;/span&gt;&lt;font face="Calibri"&gt;frame&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;）窗口将在接下来几天完成。我们也将添加其他的直接内存注入窗口，最后将实现汇编级的单步调试。&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;现在，在&lt;/span&gt;&lt;font face="Calibri"&gt;C#&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;代码里面设置一个断点，然后运行你的&amp;#8220;操作系统&amp;#8221;。如果你是使用默认的设置，&lt;/span&gt;&lt;font face="Calibri"&gt;VMWare&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;将和你的系统一起出来，同时&lt;/span&gt;&lt;font face="Calibri"&gt;Visual&lt;br /&gt;Studio&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;将会停在你的断点处。&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&amp;nbsp;&lt;/p&gt;&lt;font face="Times New Roman"&gt;&lt;/font&gt;&lt;p class="MsoListParagraphCxSpLast"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;你将会注意到&amp;#8220;&lt;/span&gt;&lt;font face="Calibri"&gt;local watch window&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;&amp;#8221;&lt;/span&gt;&lt;font face="Calibri"&gt;(&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;本地窗口？&lt;/span&gt;&lt;font face="Calibri"&gt;)&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;是可以工作的。这是&lt;/span&gt;&lt;font face="Calibri"&gt;&lt;span lang="ZH-CN"&gt; &lt;/span&gt;Cosmos Visual Studio&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;调试器的一部分。在右边出现的两个汇编调试窗口也是新的调试窗口。汇编窗口显示出这一行对应的&lt;/span&gt;&lt;font face="Calibri"&gt;IL&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;和&lt;/span&gt;&lt;font face="Calibri"&gt;X86&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;的汇编代码。如果有更多的断点，将会使用单步调试（&lt;/span&gt;&lt;font face="Calibri"&gt;stepping&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;）并且汇编调试器窗口每次都会更新。注意：在截图中有个小&lt;/span&gt;&lt;font face="Calibri"&gt;BUG,&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;在汇编窗口中只显示出一个&lt;/span&gt;&lt;font face="Calibri"&gt;IL&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;操作符。它应该是这样子的&lt;/span&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;System_Void__BreakpointsKernel_BreakpointsOS_Run____DOT__00000001:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;call&amp;nbsp;DebugStub_TracerEntry&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;;&amp;nbsp;[Cosmos.IL2CPU.X86.IL.Ldc_I4]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;push&amp;nbsp;dword&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;0x0&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;;&amp;nbsp;Stack&amp;nbsp;contains&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;1&lt;/span&gt;&amp;nbsp;items:&amp;nbsp;(&lt;span style="color: rgb(128, 0, 128);"&gt;4&lt;/span&gt;)&amp;nbsp;&lt;br /&gt;&lt;br /&gt;System_Void__BreakpointsKernel_BreakpointsOS_Run____DOT__00000002:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;;&amp;nbsp;[Cosmos.IL2CPU.X86.IL.Stloc]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;;&amp;nbsp;EBPOffset&amp;nbsp;=&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;4&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;pop&amp;nbsp;dword&amp;nbsp;EAX&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;mov&amp;nbsp;dword&amp;nbsp;[EBP&amp;nbsp;+&amp;nbsp;-&lt;span style="color: rgb(128, 0, 128);"&gt;4&lt;/span&gt;],&amp;nbsp;EAX&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;;&amp;nbsp;Stack&amp;nbsp;contains&amp;nbsp;&lt;span style="color: rgb(128, 0, 128);"&gt;0&lt;/span&gt;&amp;nbsp;items:&amp;nbsp;()&lt;/div&gt;&lt;/div&gt;&lt;p class="MsoListParagraphCxSpLast"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;在刚开始的寄存器窗口显示了&lt;/span&gt;&lt;font face="Calibri"&gt;X86&lt;br /&gt;&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;寄存器。最近更新的值将会用红色标识出来。在监控改变上这很有用。&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;font face="Times New Roman"&gt;&lt;/font&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;为什么需要一个汇编级的调试器。&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;font face="Times New Roman"&gt;&lt;/font&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;既然&lt;/span&gt;&lt;font face="Calibri"&gt;COSMOS&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;使用&lt;/span&gt;&lt;font face="Calibri"&gt;C#&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;来写的，为什么我们需要一个如此底层的调试？我们觉得很多用户可能只需要用到&lt;/span&gt;&lt;font face="Calibri"&gt;C#&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;调试器。尽管如此，汇编级调试器对工作在编译器上的用户或者在直接和硬件交互的调试中的用户来说是一个很大的帮助。&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;font face="Times New Roman"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;img src="http://www.cnblogs.com/li0803/aggbug/2184300.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/li0803/archive/2011/09/21/2184300.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/li0803/archive/2011/08/11/2134369.html</id><title type="text">Plugs介绍（翻译）---- .net/C#开源操作系统学习系列六</title><summary type="text">介绍 这篇文章将展示在COSMOS中如何实现基于WINDOWS API调用和内部调用的.net代码。另外，也包含了如何使用COSMOS，汇编或者X#语言与硬件直接进行交互。 Cosmos是什么 Cosmos一个使用Visual Studio作为开发环境的操作系统开发工具（development kit）。尽管如此，任何基于.net的语言，包括VB.NET,Fortran,Delphi Prism,IronPython,F#等等都可以用来进行开发。Cosmos本省和内核运行都是使用C# 来写的，所以命名为Cosmos。而且，NOSMOS（.NET Open Source Managed Operating System）听起来太蠢了。 Cosmos不是传统意义上的操作系统，它更应该叫做操作系统工具（Operating System Kit） ，或者正如我所说的叫做“Operating System Legos”(不知如何翻译，嘿嘿)。Cosmos让您能像使用Visual Studio和C#创建应用程序一样创建操作系统。大部分用户可以在几分钟之内自己写和引导</summary><published>2011-08-10T19:18:00Z</published><updated>2011-08-10T19:18:00Z</updated><author><name>Hundre</name><uri>http://www.cnblogs.com/li0803/</uri></author><link rel="alternate" href="http://www.cnblogs.com/li0803/archive/2011/08/11/2134369.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/li0803/archive/2011/08/11/2134369.html"/><content type="html">&lt;p&gt;&lt;strong&gt;原文地址：&lt;a title="http://www.codeproject.com/KB/cs/CosmosPlugs.aspx" href="http://www.codeproject.com/KB/cs/CosmosPlugs.aspx"&gt;http://www.codeproject.com/KB/cs/CosmosPlugs.aspx&lt;/a&gt;&lt;/strong&gt;&lt;p&gt;&lt;script type="text/javascript"&gt;&lt;!--google_ad_client = "ca-pub-4688426012213630";/* Word Ad 728&amp;#42;90 */google_ad_slot = "3216548052";google_ad_width = 728;google_ad_height = 90;//--&gt;&lt;/script&gt;&lt;script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;&lt;/script&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;介绍&lt;/strong&gt;&lt;p&gt;这篇文章将展示在COSMOS中如何实现基于WINDOWS API调用和内部调用的.net代码。另外，也包含了如何使用COSMOS，汇编或者X#语言与硬件直接进行交互。&lt;p&gt;&lt;strong&gt;Cosmos&lt;/strong&gt;&lt;strong&gt;是什么&lt;/strong&gt;&lt;p&gt;Cosmos一个使用Visual Studio作为开发环境的操作系统开发工具（development kit）。尽管如此，任何基于.net的语言，包括VB.NET,Fortran,Delphi Prism,IronPython,F#等等都可以用来进行开发。Cosmos本省和内核运行都是使用C# 来写的，所以命名为Cosmos。而且，NOSMOS（.NET Open Source Managed Operating System）听起来太蠢了。&lt;p&gt;Cosmos不是传统意义上的操作系统，它更应该叫做操作系统工具（Operating System Kit） ，或者正如我所说的叫做&amp;#8220;Operating System Legos&amp;#8221;(不知如何翻译，嘿嘿)。Cosmos让您能像使用Visual Studio和C#创建应用程序一样创建操作系统。大部分用户可以在几分钟之内自己写和引导一个他们自己的操作系统，所有这些都可以在Visual Studio中完成。Cosmos提供了与Visual Studio集成的项目类型、调试器、断点工具和观察其（watchers）等。你可以向调试你的C#或者VB.NET应用程序一样调试你的操作系统。&lt;p&gt;&lt;strong&gt;什么情况下需要Plugs&lt;/strong&gt;&lt;p&gt;在以下三种场景中需要用到Plugs:&lt;p&gt;1. 内部调用（Internal Calls）&lt;p&gt;2. P/Invoke&lt;p&gt;3. 直接汇编&lt;p&gt;内部调用和P/Invoke的情况&lt;p&gt;在.net框架提供的各种类中，有一部分不是使用.net代码来实现的，而是使用的本地代码。这样做的原因有两：&lt;p&gt;1. 被实现的方法依赖于Windows API(P/Invoke的情况)&lt;p&gt;2.被实现的方法依赖于高度优化过的C++或者在.net运行时中的汇编代码（内部调用的情况）&lt;p&gt;P/Invoke被用来往屏幕上画图，访问已存在的Window encrypition API,访问网络和其他一些类似的功能。&lt;p&gt;内部调用被需要直接访问.net运行时的类来使用。比如直接访问内存管理的类，或者对速度有要求的情况。如Math.Pow方法就是使用的内部调用。&lt;p&gt;Plugs可以使用C# ，汇编或者任何.net语言来实现。&lt;p&gt;&lt;strong&gt;直接汇编的情况&lt;/strong&gt;&lt;p&gt;对于直接与硬件进行会话，Cosmos必须能够和PIC总线，CPU IO总线，内存等进行交互。访问内存经常使用的是非类型安全的指针（unsafe pointers），尽管如此，在某些情况下还是得自己手写汇编代码。Plugs相当于接口，提供给C#直接访问汇编代码，使得对汇编调用的访问就像C#代码的方法调用一样。&lt;p&gt;&lt;strong&gt;在Cosmos&lt;/strong&gt;&lt;strong&gt;中写X86&lt;/strong&gt;&lt;strong&gt;汇编&lt;/strong&gt;&lt;p&gt;可以在Cosmos中使用类来实现X86汇编&lt;br/&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;" onclick="cnblogs_code_show('be84f675-ef99-4061-8ccd-4dbd2ad23f05')"&gt;&lt;img style="display: none;" id="code_img_opened_be84f675-ef99-4061-8ccd-4dbd2ad23f05" class="code_img_opened" onclick="cnblogs_code_hide('be84f675-ef99-4061-8ccd-4dbd2ad23f05',event)" src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif"&gt;&lt;br/&gt;&lt;div id="cnblogs_code_open_be84f675-ef99-4061-8ccd-4dbd2ad23f05" class="cnblogs_code_hide"&gt;&lt;br/&gt;&lt;div&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;Move(Registers.DX,&amp;nbsp;(xComAddr&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;+&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;).ToString());&lt;br /&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;Move(Registers.AL,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.ToString());&lt;br /&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;Out(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;dx&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;al&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;disable&amp;nbsp;all&amp;nbsp;interrupts&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;Move(Registers.DX,&amp;nbsp;(xComAddr&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;+&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;3&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;).ToString());&lt;br /&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;Move(Registers.AL,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x80&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.ToString());&lt;br /&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;Out(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;dx&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;al&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;&amp;nbsp;Enable&amp;nbsp;DLAB&amp;nbsp;(set&amp;nbsp;baud&amp;nbsp;rate&amp;nbsp;divisor)&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;Move(Registers.DX,&amp;nbsp;(xComAddr&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;+&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;).ToString());&lt;br /&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;Move(Registers.AL,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x1&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.ToString());&lt;br /&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;Out(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;dx&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;al&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Set&amp;nbsp;diviso&amp;nbsp;(low&amp;nbsp;byte)&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;Move(Registers.DX,&amp;nbsp;(xComAddr&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;+&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;).ToString());&lt;br /&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;Move(Registers.AL,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x00&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.ToString());&amp;nbsp;&lt;br /&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;Out(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;dx&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;al&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;set&amp;nbsp;divisor&amp;nbsp;(high&amp;nbsp;byte)&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;&lt;/div&gt;&lt;br/&gt;&lt;/div&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp; &lt;p&gt;但是 Cosmos也支持一个更高层次的调用X#。X#是一种类型安全的直接与X86汇编对应的汇编语言。X#如下：&lt;br/&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;br/&gt;&lt;div&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;UInt16&amp;nbsp;xComStatusAddr&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;(UInt16)(aComAddr&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;+&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;5&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&amp;nbsp;&lt;br /&gt;&lt;br/&gt;Label&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;WriteByteToComPort&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&lt;br/&gt;Label&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;WriteByteToComPort_Wait&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&lt;br /&gt;&lt;br/&gt;DX&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;xComStatusAddr;&lt;br /&gt;&lt;br/&gt;AL&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;Port[DX];&lt;br /&gt;&lt;br/&gt;AL.Test(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x20&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&lt;br/&gt;JumpIfEqual(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;WriteByteToComPort_Wait&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&lt;br/&gt;DX&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;aComAddr;&lt;br /&gt;&lt;br/&gt;AL&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;Memory[ESP&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;+&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;4&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;];&lt;br /&gt;&lt;br/&gt;Port[DX]&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;AL;&lt;br /&gt;&lt;br/&gt;Return(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;4&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&lt;br/&gt;Label&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;DebugWriteEIP&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&lt;br/&gt;AL&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;Memory[EBP&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;+&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;3&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;];&lt;br /&gt;&lt;br/&gt;EAX.Push();&lt;br /&gt;&lt;br/&gt;Call&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;WriteByteToComPort&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;();&lt;br /&gt;&lt;br/&gt;AL&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;Memory[EBP&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;+&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;2&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;];&lt;br /&gt;&lt;br/&gt;EAX.Push();&lt;br /&gt;&lt;br/&gt;Call&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;WriteByteToComPort&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;();&lt;br /&gt;&lt;br/&gt;AL&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;Memory[EBP&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;+&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;];&lt;br /&gt;&lt;br/&gt;EAX.Push();&lt;br /&gt;&lt;br/&gt;Call&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;WriteByteToComPort&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;();&lt;br /&gt;&lt;br/&gt;AL&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;Memory[EBP];&lt;br /&gt;&lt;br/&gt;EAX.Push();&lt;br /&gt;&lt;br/&gt;Call&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;WriteByteToComPort&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;();&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Return();&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;&lt;/div&gt;&lt;br/&gt;&lt;p&gt;&lt;strong&gt;开始实现Plugs&lt;/strong&gt;&lt;p&gt;首先我们必须先决定我们的plug要干什么。举例来说，Math.Abs(double)被用来实现一个内部调用&lt;br/&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;br/&gt;&lt;div&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.method&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;hidebysig&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;float64&amp;nbsp;Abs(float64&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;value&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&amp;nbsp;cil&amp;nbsp;managed&amp;nbsp;internalcall&lt;br /&gt;&lt;br/&gt;{&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.custom&amp;nbsp;instance&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;System.Security.SecuritySafeCriticalAttribute::.ctor()&lt;br /&gt;&lt;br/&gt;}&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;&lt;/div&gt;&lt;br/&gt;&lt;p&gt;如果你直接使用这个方法而Cosmos没有相应的plug，编译器便会产生一个&amp;#8220;plug needed&amp;#8221;错误。因为在IL2CPU没有IL代码把它编译为X86代码。所以&amp;#8220;plug needed&amp;#8221;错误的意思是你需要一些依赖内部调用或者P/Invoke的方法，否则Cosmos将无法编译。&lt;p&gt;在Math.Pow这个例子中，是可以通过编译的因为Cosmos的内核已经包含了一个在编译的时候会自动被调用的plug.&lt;p&gt;编译器在运行时中使用plug来替换实际的代码。Plug中提供的代码被用来替换对内部调用和WINDOWS API的调用，这些调用无法在Cosmos中直接使用因为Cosmos不是运行在Windows或者CLR下面的。Plug就是这么一个强制嵌入和替换的格式（It&amp;#8217;s a form of forced inlining and replacement）&lt;p&gt;为了创建一个Plug，我们需要创建一个新的类。在内核中的Plug被创建为各个单独的程序集(assemblies)并且被内核单独引用。这样允许IL2CPU包含和使用plug。&lt;br/&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;br/&gt;&lt;div&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;[Plug(Target&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;typeof&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;global&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;::System.Math))]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;class&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;MathImpl&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;double&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;Abs(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;double&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;value)&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;(value&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&amp;nbsp;{&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;-&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;value;&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;else&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;{&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;value;&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;&lt;/div&gt;&lt;br/&gt;&lt;p&gt;虽然这里是显示了一个方法，但其实Plug类能包括多个方法。在这个例子中Plug的属性（attribute）是关键因素。它告诉IL2CPU这个plug用来替换System.Math类中的方法。然后IL2CPU便会去找与System.Math中方法对应的方法，并把他们给换掉。&lt;p&gt;&lt;strong&gt;直接汇编的plug&lt;/strong&gt;&lt;p&gt;直接汇编的plug是被用来运行C#直接和X86汇编进行交互的代码。比如IOPort类允许设备驱动程序在需要和硬件设备通信的时候直接访问CPU总线。&lt;p&gt;首先创建一个空的C# 类，创建将要被替换的空方法。如果这个被替换的方法的返回类型不是VOID，则plug中的方法需要随便返回一个值以使C# 编译器能编译它。尽管如此这个方法的返回值是不会被用到的，因为plug将使被替换的目标方法被忽略，而以plug中实现的方法替换掉原方法。&lt;br/&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;br/&gt;&lt;div&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;abstract&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;class&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;IOPortBase&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;readonly&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;UInt16&amp;nbsp;Port;&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;all&amp;nbsp;ctors&amp;nbsp;are&amp;nbsp;internal&amp;nbsp;-&amp;nbsp;Only&amp;nbsp;Core&amp;nbsp;ring&amp;nbsp;can&amp;nbsp;create&amp;nbsp;it..&amp;nbsp;but&amp;nbsp;hardware&amp;nbsp;ring&amp;nbsp;can&amp;nbsp;use&amp;nbsp;it.&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;internal&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;IOPortBase(UInt16&amp;nbsp;aPort)&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Port&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;aPort;&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;internal&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;IOPortBase(UInt16&amp;nbsp;aBase,&amp;nbsp;UInt16&amp;nbsp;aOffset)&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;C#&amp;nbsp;math&amp;nbsp;promotes&amp;nbsp;things&amp;nbsp;to&amp;nbsp;integers,&amp;nbsp;so&amp;nbsp;we&amp;nbsp;have&amp;nbsp;this&amp;nbsp;constructor&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;to&amp;nbsp;relieve&amp;nbsp;the&amp;nbsp;use&amp;nbsp;from&amp;nbsp;having&amp;nbsp;to&amp;nbsp;do&amp;nbsp;so&amp;nbsp;many&amp;nbsp;casts&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Port&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;(UInt16)(aBase&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;+&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;aOffset);&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;TODO:&amp;nbsp;Reads&amp;nbsp;and&amp;nbsp;writes&amp;nbsp;can&amp;nbsp;use&amp;nbsp;this&amp;nbsp;to&amp;nbsp;get&amp;nbsp;port&amp;nbsp;instead&amp;nbsp;of&amp;nbsp;argument&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;protected&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;Write8(UInt16&amp;nbsp;aPort,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;aData)&amp;nbsp;{&amp;nbsp;}&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;Plugged&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;protected&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;Write16(UInt16&amp;nbsp;aPort,&amp;nbsp;UInt16&amp;nbsp;aData)&amp;nbsp;{&amp;nbsp;}&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;Plugged&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;protected&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;Write32(UInt16&amp;nbsp;aPort,&amp;nbsp;UInt32&amp;nbsp;aData)&amp;nbsp;{&amp;nbsp;}&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;Plugged&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;protected&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;Read8(UInt16&amp;nbsp;aPort)&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&amp;nbsp;}&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;Plugged&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;protected&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;UInt16&amp;nbsp;Read16(UInt16&amp;nbsp;aPort)&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&amp;nbsp;}&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;Plugged&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;protected&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;UInt32&amp;nbsp;Read32(UInt16&amp;nbsp;aPort)&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&amp;nbsp;}&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;Plugged&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;&lt;/div&gt;&lt;br/&gt;&lt;p&gt;正如你看到的&amp;#8220;Write&amp;#8221;方法是空的，而&amp;#8220;Read&amp;#8221;方法需要 一个名义上的返回值。&lt;p&gt;这个类将被一下代码给替换掉：&lt;br/&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;br/&gt;&lt;div&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;using&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;System;&lt;br /&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;using&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;System.Collections.Generic;&lt;br /&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;using&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;System.Linq;&lt;br /&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;using&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;System.Text;&lt;br /&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;using&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;Cosmos.IL2CPU.Plugs;&lt;br /&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;using&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;Assembler&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;Cosmos.Compiler.Assembler.Assembler;&lt;br /&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;using&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;Cosmos.Compiler.Assembler.X86;&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&lt;br /&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;namespace&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;Cosmos.Core.Plugs&lt;br /&gt;&lt;br/&gt;{&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[Plug(Target&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;typeof&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(Cosmos.Core.IOPortBase))]&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;class&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;IOPortImpl&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[Inline]&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;Write8(UInt16&amp;nbsp;aPort,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;aData)&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;TODO:&amp;nbsp;This&amp;nbsp;is&amp;nbsp;a&amp;nbsp;lot&amp;nbsp;of&amp;nbsp;work&amp;nbsp;to&amp;nbsp;write&amp;nbsp;to&amp;nbsp;a&amp;nbsp;single&amp;nbsp;port.&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;We&amp;nbsp;need&amp;nbsp;to&amp;nbsp;have&amp;nbsp;some&amp;nbsp;kind&amp;nbsp;of&amp;nbsp;inline&amp;nbsp;ASM&amp;nbsp;option&amp;nbsp;that&amp;nbsp;can&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;emit&amp;nbsp;a&amp;nbsp;single&amp;nbsp;out&amp;nbsp;instruction&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Move&amp;nbsp;{&amp;nbsp;DestinationReg&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Registers.EDX,&amp;nbsp;SourceReg&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Registers.EBP,&amp;nbsp;SourceDisplacement&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x0C&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;SourceIsIndirect&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;true&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;};&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Move&amp;nbsp;{&amp;nbsp;DestinationReg&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Registers.EAX,&amp;nbsp;SourceReg&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Registers.EBP,&amp;nbsp;SourceDisplacement&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x08&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;SourceIsIndirect&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;true&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;};&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Out&amp;nbsp;{&amp;nbsp;DestinationReg&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Registers.AL&amp;nbsp;};&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[Inline]&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;Write16(UInt16&amp;nbsp;aPort,&amp;nbsp;UInt16&amp;nbsp;aData)&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Move&amp;nbsp;{&amp;nbsp;DestinationReg&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Registers.EDX,&amp;nbsp;SourceReg&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Registers.EBP,&amp;nbsp;SourceIsIndirect&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;true&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;SourceDisplacement&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x0C&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;};&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Move&amp;nbsp;{&amp;nbsp;DestinationReg&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Registers.EAX,&amp;nbsp;SourceReg&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Registers.EBP,&amp;nbsp;SourceIsIndirect&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;true&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;SourceDisplacement&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x08&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;};&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Out&amp;nbsp;{&amp;nbsp;DestinationReg&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Registers.AX&amp;nbsp;};&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[Inline]&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;Write32(UInt16&amp;nbsp;aPort,&amp;nbsp;UInt32&amp;nbsp;aData)&amp;nbsp;&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Move&amp;nbsp;{&amp;nbsp;DestinationReg&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Registers.EDX,&amp;nbsp;SourceReg&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Registers.EBP,&amp;nbsp;SourceIsIndirect&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;true&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;SourceDisplacement&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x0C&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;};&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Move&amp;nbsp;{&amp;nbsp;DestinationReg&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Registers.EAX,&amp;nbsp;SourceReg&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Registers.EBP,&amp;nbsp;SourceIsIndirect&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;true&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;SourceDisplacement&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x08&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;};&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Out&amp;nbsp;{&amp;nbsp;DestinationReg&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Registers.EAX&amp;nbsp;};&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[Inline]&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;Read8(UInt16&amp;nbsp;aPort)&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Move&amp;nbsp;{&amp;nbsp;DestinationReg&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Registers.EDX,&amp;nbsp;SourceReg&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Registers.EBP,&amp;nbsp;SourceIsIndirect&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;true&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;SourceDisplacement&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x08&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;};&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;TODO:&amp;nbsp;Do&amp;nbsp;we&amp;nbsp;need&amp;nbsp;to&amp;nbsp;clear&amp;nbsp;rest&amp;nbsp;of&amp;nbsp;EAX&amp;nbsp;first?&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MTW:&amp;nbsp;technically&amp;nbsp;not,&amp;nbsp;as&amp;nbsp;in&amp;nbsp;other&amp;nbsp;places,&amp;nbsp;it&amp;nbsp;_should_&amp;nbsp;be&amp;nbsp;working&amp;nbsp;with&amp;nbsp;AL&amp;nbsp;too..&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Move&amp;nbsp;{&amp;nbsp;DestinationReg&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Registers.EAX,&amp;nbsp;SourceValue&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;};&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.In&amp;nbsp;{&amp;nbsp;DestinationReg&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Registers.AL&amp;nbsp;};&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Push&amp;nbsp;{&amp;nbsp;DestinationReg&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Registers.EAX&amp;nbsp;};&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[Inline]&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;UInt16&amp;nbsp;Read16(UInt16&amp;nbsp;aPort)&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Move&amp;nbsp;{&amp;nbsp;DestinationReg&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Registers.EDX,&amp;nbsp;SourceReg&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Registers.EBP,&amp;nbsp;SourceIsIndirect&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;true&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;SourceDisplacement&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x08&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;};&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Move&amp;nbsp;{&amp;nbsp;DestinationReg&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Registers.EAX,&amp;nbsp;SourceValue&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;};&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.In&amp;nbsp;{&amp;nbsp;DestinationReg&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Registers.AX&amp;nbsp;};&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Push&amp;nbsp;{&amp;nbsp;DestinationReg&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Registers.EAX&amp;nbsp;};&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[Inline]&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;UInt32&amp;nbsp;Read32(UInt16&amp;nbsp;aPort)&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Move&amp;nbsp;{&amp;nbsp;DestinationReg&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Registers.EDX,&amp;nbsp;SourceReg&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Registers.EBP,&amp;nbsp;SourceIsIndirect&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;true&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;SourceDisplacement&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x08&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;};&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.In&amp;nbsp;{&amp;nbsp;DestinationReg&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Registers.EAX&amp;nbsp;};&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Push&amp;nbsp;{&amp;nbsp;DestinationReg&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Registers.EAX&amp;nbsp;};&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br/&gt;}&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;&lt;/div&gt;&lt;br/&gt;&lt;p&gt;注：在这个例子中的代码（指那些看起来像汇编的代码&amp;#8212;译者注）不是X#代码。我们一些比较老的plug任然是使用比较老的语法来写的。&lt;p&gt;现在我们有了一个plug，我们可以使用C#直接访问IOPort这个类。下面这个例子摘自ATA类&lt;br/&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;br/&gt;&lt;div&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;override&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;ReadBlock(UInt64&amp;nbsp;aBlockNo,&amp;nbsp;UInt32&amp;nbsp;aBlockCount,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;byte&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;[]&amp;nbsp;aData)&amp;nbsp;{&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CheckDataSize(aData,&amp;nbsp;aBlockCount);&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SelectSector(aBlockNo,&amp;nbsp;aBlockCount);&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SendCmd(Cmd.ReadPio);&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IO.Data.Read8(aData);&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;&lt;/div&gt;&lt;br/&gt;&amp;nbsp; &lt;p&gt;&lt;strong&gt;其他plug&lt;/strong&gt;&lt;strong&gt;的例子&lt;/strong&gt;&lt;p&gt;在BCL（Binary Classes Library?。.net中框架提供的类），Console类中使用的一些内部调用通常最后都使用到了WINDOWS API，我们不需要逐个替换每一个调用层次上直接映射到WINDOWS API调用，而只需在一个更高的调用层次树上调用我们的TextScreen类完全替换这些方法。（We don't need to plug only the methods that directly map to Windows API calls, but instead we plug methods much higher up the tree and completely replace the implementation to call our TextScreen class instead.）&lt;br/&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;br/&gt;&lt;div&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;namespace&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;Cosmos.System.Plugs.System.System&amp;nbsp;{&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[Plug(Target&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;typeof&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;global&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;::System.Console))]&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;class&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;ConsoleImpl&amp;nbsp;{&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;private&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;ConsoleColor&amp;nbsp;mForeground&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;ConsoleColor.White;&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;private&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;ConsoleColor&amp;nbsp;mBackground&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;ConsoleColor.Black;&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;ConsoleColor&amp;nbsp;get_BackgroundColor()&amp;nbsp;{&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;mBackground;&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;set_BackgroundColor(ConsoleColor&amp;nbsp;value)&amp;nbsp;{&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mBackground&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;value;&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cosmos.Hardware.Global.TextScreen.SetColors(mForeground,&amp;nbsp;mBackground);&lt;br /&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;&lt;/div&gt;&lt;br/&gt;&lt;p&gt;（翻译就到此结束了，水平有限，欢迎大家指点）&lt;/p&gt; &lt;img src="http://www.cnblogs.com/li0803/aggbug/2134369.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/li0803/archive/2011/08/11/2134369.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/li0803/archive/2011/04/18/2020041.html</id><title type="text">Cosmos的库--.net/C#开源操作系统学习系类五</title><summary type="text">在各种库中，有一部分的库是封装了对底层硬件的操作的，例如在屏幕上输入字符，使用网卡发送数据包等。因为是直接对硬件进行操作，所以这一种类型的库的代码是和硬件相关的，这就是为什么我们会有x86的标准C程序库和arm的标准C程序库，两套不同的硬件体系，需要不同的库来完成对硬件的实际操作，每一套库中，都根据不同的硬件情况，按照硬件的规格定义好数据的排列方式（这就是为什么会有int,int16,int32,int64这么多蛋疼的数据类型的原因之一，因为编译器编译后有些数据必须占有足够长的位数以符合硬件产品的规格要求），以及根据硬件的功能提供出相应的函数，然后编译器编译时就能编译出符合硬件要求的格式的数据排列方式和操作这些数据的机器码。</summary><published>2011-04-18T09:15:00Z</published><updated>2011-04-18T09:15:00Z</updated><author><name>Hundre</name><uri>http://www.cnblogs.com/li0803/</uri></author><link rel="alternate" href="http://www.cnblogs.com/li0803/archive/2011/04/18/2020041.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/li0803/archive/2011/04/18/2020041.html"/><content type="html">&lt;p&gt; &lt;font face="宋体"&gt;&lt;br /&gt;&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;接上文，争取这一次打通操作系统开发的任督二脉&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;~~~&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;嘿嘿&lt;/span&gt;&lt;font face="宋体"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;库对于大家来说都不陌生，&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;我们做&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;C&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;开发时会引入标准输入输出头文件&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;stdio.h&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;，做&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;MFC&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;开发时又会引入&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;afx.h&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;头文件，使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;DirectX&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;做游戏开发时又会引入&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;DirectX&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;的头文件等等，在头文件中有给我们定义好的函数、结构、类等等可供使用，我们写代码时直接调用即可。&lt;/span&gt;&lt;font face="宋体"&gt;&lt;br /&gt;&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;在各种库中，&lt;span style="color: red;"&gt;有一部分的库是封装了对底层硬件的操作的&lt;/span&gt;，例如在屏幕上输入字符，使用网卡发送数据包等。&lt;span style="color: red;"&gt;因为是直接对硬件进行操作，所以这一种类型的库的代码是和硬件相关的&lt;/span&gt;，这就是为什么我们会有&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;x86&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;的标准&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;C&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;程序库和&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;arm&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;的标准&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;C&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;程序库，两套不同的硬件体系，需要不同的库来完成对硬件的实际操作，每一套库中，都根据不同的硬件情况，按照硬件的规格定义好数据的排列方式（这就是为什么会有&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;int,int16,int32,int64&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;这么多蛋疼的数据类型的原因之一&lt;a name="_GoBack"&gt;&lt;/a&gt;，因为编译器编译后有些数据必须占有足够长的位数以符合硬件产品的规格要求），以及根据硬件的功能提供出相应的函数，然后编译器编译时就能编译出符合硬件要求的格式的数据排列方式和操作这些数据的机器码。&lt;/span&gt;&lt;font face="宋体"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;span style="color: red; font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;在库中，根据不同的硬件特点定义了只适用于特定硬件的数据结构和函数&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;，这就是为什么我们用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;C++&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;开发普通的软件的时候使用标准输入输出库&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;(stdio.h)&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;，而用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;C++&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;开发游戏软件的时候需要使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;DirectX&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;库的原因。因为&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;DirectX&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;的库中定义有调用显卡的特殊功能的数据结构、类或者方法，从而能充分利用显卡这个硬件来展示游戏内容。&lt;/span&gt;&lt;font face="宋体"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;该说点沾边的了，其实&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;Cosmos&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;中也定义了一些这样的库，用来提供开启&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;CPU&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;的分页存储、读写端口的数据等功能，在编写操作系统的过程中，我们只需要自己实现这些库中的类和函数来完成对硬件的操作。同时因为这些功能都是直接操作硬件的，所以一般的操作系统开发包里面都不会提供给用户使用，咱们现在是操作系统的开发者，所以才会使用到这些底层的东西（也就开源的操作系统能看到源代码，才会从开发者的角度看到有这么一些函数或者类&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&amp;#8230;&amp;#8230;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;），另外从某种程度上看，做驱动程序的开发的人员也需要编写一些底层的对硬件的操作库来供应用软件的开发人员使用。&lt;/span&gt;&lt;font face="宋体"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;C#&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;的项目中把程序集添加进来，就相当于&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;C/C++&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;里面的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;include&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;头文件操作。这些对硬件操作的代码虽然都是使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;C# &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;来编写的，但在编译的时候&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;IL2CPU&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;编译器会把这些操作全都转换成特定的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;CPU&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;操作指令这样就可以达到使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;C#&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;来控制硬件的目的，由此可见，一套好的代码库能极大地提高我们的工作效率。但是，目前&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;C#&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;的对硬件进行操作的库真是少之又少啊（要不就是我太孤陋寡闻了，还没能见着这方面的东西），只能是自己来写了&lt;/span&gt;&lt;span style="font-family: Wingdings; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-char-type: symbol; mso-symbol-font-family: Wingdings;" lang="EN-US"&gt;&lt;span style="mso-char-type: symbol; mso-symbol-font-family: Wingdings;"&gt;L&lt;/span&gt;&lt;/span&gt;&lt;font face="宋体"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;由以上看来库的历史比操作系统的历史还长哦&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;~~~&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;呵呵。&lt;/span&gt;&lt;font face="宋体"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;好了，理论到此结束，看图说话&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/li0803/Snap1.jpg" /&gt;&lt;/span&gt;&lt;font face="宋体"&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;COSMOS&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;中，库有个特别的叫法，叫做&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;Plugs&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;（插件？）。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;前面关于&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;COSMOS&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;编译的文章中说到，在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;COSMOS&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;编译的时候会加载所有的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;Plugs&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;并进行编译，而&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;COSMOS&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;所有的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;Plugs&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;都放在了&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;Cosmos.Kernel.Plugs&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;项目中&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/li0803/5-3.jpg" width="340" height="650" /&gt;&lt;/span&gt;&lt;font face="宋体"&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;我们看到了上文提过的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;CreateGDT&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;操作，还有&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;Console&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;这个我们比较熟悉的类型。先看下&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;CreateGDT&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;中的代码&lt;/span&gt;&lt;/p&gt;&lt;font face="宋体"&gt;&lt;p class="MsoNormal"&gt;&lt;span style='color: black; font-family: Consolas; font-size: 8pt; mso-fareast-font-family: "Times New Roman";' lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;class&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CreateGDT&amp;nbsp;:&amp;nbsp;AssemblerMethod&amp;nbsp;{&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;override&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;Assemble(Assembler&amp;nbsp;aAssembler)&amp;nbsp;{&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;xFieldName&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;_NATIVE_GDT_Contents&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;xFieldData&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;Null&amp;nbsp;Segment&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;0,0,0,0,0,0,0,0&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;Code&amp;nbsp;Segment&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;+&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;,&amp;nbsp;0xFF,&amp;nbsp;0xFF,&amp;nbsp;0,&amp;nbsp;0,&amp;nbsp;0,&amp;nbsp;0x99,&amp;nbsp;0xCF,&amp;nbsp;0&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;Data&amp;nbsp;Segment&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;+&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;,&amp;nbsp;0xFF,0xFF,0,0,0,0x93,0xCF,0&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;aAssembler.DataMembers.Add(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;KeyValuePair&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;DataMember&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;(aAssembler.CurrentGroup,&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;DataMember(xFieldName,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;db&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;xFieldData)));&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xFieldName&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;_NATIVE_GDT_Pointer&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;xFieldData&amp;nbsp;=&amp;nbsp;"0x17,&amp;nbsp;(_NATIVE_GDT_Contents&amp;nbsp;and&amp;nbsp;0xFFFF),&amp;nbsp;(_NATIVE_GDT_Contents&amp;nbsp;shr&amp;nbsp;16)";&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;aAssembler.DataMembers.Add(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;KeyValuePair&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;DataMember&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;(aAssembler.CurrentGroup,&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;DataMember(xFieldName,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;dw&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;0x17,0,0&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)));&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Move(Registers.EAX,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;_NATIVE_GDT_Pointer&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Move(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;dword&amp;nbsp;[_NATIVE_GDT_Pointer&amp;nbsp;+&amp;nbsp;2]&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;_NATIVE_GDT_Contents&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;Label(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;.RegisterGDT&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUNative.Lgdt(Registers.AtEAX);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Move(Registers.AX,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;0x10&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Move(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;ds&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;Registers.AX);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Move(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;es&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;Registers.AX);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Move(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;fs&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;Registers.AX);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Move(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;gs&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;Registers.AX);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.Move(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;ss&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;Registers.AX);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;Force&amp;nbsp;reload&amp;nbsp;of&amp;nbsp;code&amp;nbsp;segement&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;CPUx86.JumpAlways(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;0x8:flush__GDT__table&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;Label(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;flush__GDT__table&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style='color: black; font-family: Consolas; font-size: 8pt; mso-fareast-font-family: "Times New Roman";' lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;/font&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;可以看到有一些&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;x86&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;的指令在里面，因为这是创建&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;x86&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;特有的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;GDT&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;这个数据结构，这里直接调用了&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;IL2CPU&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;提供的功能（例如&lt;/span&gt;&lt;span style='color: black; line-height: 115%; font-family: Consolas; font-size: 8pt; mso-fareast-font-family: "Times New Roman";' lang="EN-US"&gt;CPUx86.&lt;/span&gt;&lt;span style='color: rgb(43, 145, 175); line-height: 115%; font-family: Consolas; font-size: 8pt; mso-fareast-font-family: "Times New Roman";' lang="EN-US"&gt;Move&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;）来生成&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;x86&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;的指令。&lt;/span&gt;&lt;/p&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;总的来说，在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;Cosmos.Kernel.Plugs&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;里面，实现和封装了对硬件操作的大部分功能，然后再由我们的启动项目（这里为&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;Cosmos.Shell.Guess&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;）来在不同的时间调用，以此来搭建出供程序员使用的一个硬件环境。这个环境对外都是通过开放一些特定的类来给程序员使用，目前来看这些类还只是很底层的操作硬件的类，也许以后会在这一层上再封装出一层&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;API&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;来。&lt;/span&gt;&lt;font face="宋体"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;（感觉这一次自己的截图不太给力啊&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&amp;#8230;&amp;#8230;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;）&lt;/span&gt;&lt;/p&gt;&lt;font face="宋体"&gt;&lt;br /&gt;&lt;/font&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;IL2CPU&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;在编译时会根据启动项目的程序集加载被引入的程序集和&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;Plugs&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;及&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;Plugs&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;项目中引入的程序集。对于里程碑&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;，最后需要处理的程序集如下：&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/li0803/Snap3.jpg" /&gt;&lt;/span&gt;&lt;font face="宋体"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;总共&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;34&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;个，需要编译器处理的函数如下：&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes;" lang="EN-US"&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/li0803/5Snap3.jpg" /&gt;&lt;/span&gt;&lt;/p&gt;&lt;font face="宋体"&gt;&lt;br /&gt;&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;共&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;318&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;个，编译完成后在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;/Build/Tools/asm&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;目录下生成以下文件：&lt;/span&gt;&lt;font face="宋体"&gt;&lt;br /&gt;&lt;/font&gt;&lt;p class="MsoNormal"&gt;&lt;span style="mso-no-proof: yes;" lang="EN-US"&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/li0803/5-4.jpg" width="359" height="472" /&gt;&lt;/span&gt;&lt;/p&gt;&lt;font face="宋体"&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;/font&gt;&lt;p&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;由生成的目录我们就能很直观的看出都编译了那些程序集，这里最后生成的文件为&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;13&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;个，但前面我们看到总共加载了&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;34&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;个程序集来进行处理，这&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;34&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;个程序集在编译的过程中会被&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;IL2CPU&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;有选择地进行合并，最后输出到上面相应的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;13&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;个文件里面。剩下的就是编译这些汇编程序文件为二进制文件即可，之后的内容欢迎参看该系列的第二篇文章&lt;/span&gt;&lt;span style="font-family: Wingdings; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-char-type: symbol; mso-symbol-font-family: Wingdings;" lang="EN-US"&gt;&lt;span style="mso-char-type: symbol; mso-symbol-font-family: Wingdings;"&gt;J&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: Wingdings; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-char-type: symbol; mso-symbol-font-family: Wingdings;" lang="EN-US"&gt;&lt;span style="mso-char-type: symbol; mso-symbol-font-family: Wingdings;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;最后，小小地揭秘一下（如果这也算是秘密的话&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;~&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;嘿嘿）：我们可以看到，在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;Cosmos.Shell.Guess&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;这个项目中，我们使用的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;Console&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;这个类是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;.net framework&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;中定义的类，同时我们自己定义的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;Console&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;类中的方法和属性的名称和&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;.net framework&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;中定义的一模一样，这个只要在编译的时候制定是使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;.net framework&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;中的类还是使用我们自己定义的类就可以实现跨平台的目的，这就是跨平台的秘密，这里跨的是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;.net&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;平台和&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;x86&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;平台，我们也可以自己实现&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;arm&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;下的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;Console&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;类来实现跨&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;arm&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;的平台（啊呀，谁拿砖拍的我&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;~~&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;）。&lt;/span&gt;&lt;font face="宋体"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;再小小地总结一下开发一个操作系统需要的一些前期工作&lt;/span&gt;&lt;font face="宋体"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/li0803/无标题.jpg" /&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;到这里我觉得操作系统开发的大致思路应该都理清楚了，剩下的就是学习硬件如何工作以及如何运行，完了之后再编写出相应的代码库对相应的硬件进行操作，同时，根据教科书上所说，再实现进程的调度管理、硬件&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;IO&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;管理、文件系统等功能，一个基本的操作系统就算是出来了。整个开发流程就是：写对硬件操作的代码（这些代码有时就被称为库，在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;COSMOS&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;中成为&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;Plug&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;）&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;-&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;调用对硬件操作的代码（库）来实现对硬件的管理，不知道这算不算是打通了操作系统开发的任督二脉（还是个人意见，欢迎拍砖）&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;&lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%; font-family: 宋体; font-size: 9.5pt; mso-ascii-font-family: Consolas; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Consolas; mso-bidi-font-family: Consolas;"&gt;常规广告时间：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://hundre.taobao.com/"&gt;&lt;span style="line-height: 115%; font-family: 宋体; font-size: 9.5pt; mso-ascii-font-family: Consolas; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Consolas; mso-bidi-font-family: Consolas;" lang="EN-US"&gt;&lt;span lang="EN-US"&gt;&lt;font color="#0000ff"&gt;欢迎光临小弟的淘宝话费充值小店捧场，呵呵&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 9.5pt;" lang="EN-US"&gt;&lt;O:p&gt;&lt;/O:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%; font-family: 宋体; font-size: 9.5pt; mso-ascii-font-family: Consolas; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Consolas; mso-bidi-font-family: Consolas;"&gt;参考资料：&lt;/span&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 9.5pt;" lang="EN-US"&gt;&lt;O:p&gt;&lt;/O:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://s.click.taobao.com/t_8?e=7HZ6jHSTZPxyq1Urnw5sx11hsIrHgQjbu8v6Ym%2BHh6Vn&amp;amp;p=mm_10791315_0_0"&gt;&lt;font color="#0000ff"&gt;&lt;span style="line-height: 115%; font-family: 宋体; font-size: 9.5pt; mso-ascii-font-family: Consolas; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Consolas; mso-bidi-font-family: Consolas;" lang="EN-US"&gt;&lt;span lang="EN-US"&gt;《程序员的自我修养&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;#8212;&lt;/span&gt;&lt;span style="line-height: 115%; font-family: 宋体; font-size: 9.5pt; mso-ascii-font-family: Consolas; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Consolas; mso-bidi-font-family: Consolas;" lang="EN-US"&gt;&lt;span lang="EN-US"&gt;连接、装载与库》&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 9.5pt;" lang="EN-US"&gt;&lt;O:p&gt;&lt;/O:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://s.click.taobao.com/t_8?e=7HZ6jHSTZT6cFOrdSGHldWtiUJEmIwxbnymf6RxYe4u1&amp;amp;p=mm_10791315_0_0"&gt;&lt;font color="#0000ff"&gt;&lt;span style="line-height: 115%; font-family: 宋体; font-size: 9.5pt; mso-ascii-font-family: Consolas; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Consolas; mso-bidi-font-family: Consolas;" lang="EN-US"&gt;&lt;span lang="EN-US"&gt;《操作系统的设计与实现》&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 9.5pt;"&gt;--&lt;/span&gt;&lt;span style="line-height: 115%; font-family: 宋体; font-size: 9.5pt; mso-ascii-font-family: Consolas; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Consolas; mso-bidi-font-family: Consolas;" lang="EN-US"&gt;&lt;span lang="EN-US"&gt;上册&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 9.5pt;" lang="EN-US"&gt;&lt;O:p&gt;&lt;/O:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;/p&gt;&lt;/span&gt;&lt;p class="MsoNormal"&gt;&lt;font face="宋体"&gt;&lt;br /&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;   &lt;img src="http://www.cnblogs.com/li0803/aggbug/2020041.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/li0803/archive/2011/04/18/2020041.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/li0803/archive/2011/03/28/1997564.html</id><title type="text">Cosmos里程碑1--.net/C#开源操作系统学习系列四</title><summary type="text">对于IBM-PC兼容机的硬件启动流程我目前理解是这样的：通电-&gt;BIOS初始化与自检-&gt;CPU初始化-&gt;加载硬盘的0磁道0柱面1扇区的内容进内存并开始执行这一部分的内容。到此，硬件的过程—注意是硬件--就走完了，剩下的就都交给0磁道0柱面1扇区的程序来执行，这里面的东西就是我们程序员要做的东西了。 这里如果没有操作系统的话，那么从0磁道0柱面1扇区开始执行的程序就是我们自己写的程序，但这样一次只能执行一个，很浪费硬件资源，如果要换别的程序的话还得重新启动一次硬件，所以我们希望这个首先执行的程序可以一直运行，然后再向这个程序发出命令，让这个程序来执行我们想要执行的程序，这样就可以不用重启硬件就能运行多个程序了，慢慢地这个我们对其发出命令让其运行别的程序的程序就变成了我们所谓的操作系统了。</summary><published>2011-03-28T04:06:00Z</published><updated>2011-03-28T04:06:00Z</updated><author><name>Hundre</name><uri>http://www.cnblogs.com/li0803/</uri></author><link rel="alternate" href="http://www.cnblogs.com/li0803/archive/2011/03/28/1997564.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/li0803/archive/2011/03/28/1997564.html"/><content type="html">&lt;p&gt;使用的代码包为cosmos14395.zip，以下把COSMOS里程碑1简称为COSMOS MS1或 MS1 COSMOS&lt;br /&gt;&lt;br /&gt;申请：由于本篇内容涉及的技术的东西太多，小弟水平有限，如有思想认识上的错误，欢迎大家指正。&lt;/p&gt;&lt;script type="text/javascript"&gt;&lt;!--google_ad_client = "ca-pub-4688426012213630";/* Word Ad 200&amp;#42;90 */google_ad_slot = "1989664125";google_ad_width = 468;google_ad_height = 60;//--&gt;&lt;/script&gt;&lt;script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;&lt;/script&gt;&lt;p&gt;&lt;br /&gt;对于IBM-PC兼容机的硬件启动流程我目前理解是这样的：通电-&amp;gt;BIOS初始化与自检-&amp;gt;CPU初始化-&amp;gt;加载硬盘的0磁道0柱面1扇区的内容进内存并开始执行这一部分的内容。到此，硬件的过程&amp;#8212;注意是硬件--就走完了，剩下的就都交给0磁道0柱面1扇区的程序来执行，这里面的东西就是我们程序员要做的东西了。&lt;br /&gt;&lt;br /&gt;这里如果没有操作系统的话，那么从0磁道0柱面1扇区开始执行的程序就是我们自己写的程序，但这样一次只能执行一个，很浪费硬件资源，如果要换别的程序的话还得重新启动一次硬件，所以我们希望这个首先执行的程序可以一直运行，然后再向这个程序发出命令，让这个程序来执行我们想要执行的程序，这样就可以不用重启硬件就能运行多个程序了，慢慢地这个我们对其发出命令让其运行别的程序的程序就变成了我们所谓的操作系统了。&lt;br /&gt;&lt;br /&gt;随着操作系统的发展，现代操作系统的一般都需要做以下工作：&lt;br /&gt;&lt;br /&gt;1． 进程管理&lt;br /&gt;2． 内存管理&lt;br /&gt;3． IO管理&lt;br /&gt;4． 文件系统管理&lt;br /&gt;(以上为参考《操作系统的设计与实现》一书)&lt;br /&gt;&lt;br /&gt;对于我们这次要分析的COSMOS MS1，那么他实现了以上哪些功能呢，严格来说都没实现（第一个里程碑版本嘛，能运行就可以了），要说的话可以说实现了一些IO管理上的功能，如向显示器上输出字符和相应键盘输入。下面通过一副图来说一下COSMOS &lt;br /&gt;MS1操作系统（即PC机软件部分）的启动过程：&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/li0803/无标题.jpg" width="288" height="315" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;font face="宋体"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;由图中可以看到，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;磁道&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;柱面&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;扇区是一个叫做&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;BOOT&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;（也有叫做&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;BOOTLOADER&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;的）的程序，由它把操作系统的内核加载到内存中，这里再注意是操作系统内核，不是整个操作系统。那么为什么不一开始就加载操作系统而是要通过&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;BOOT&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;来完成加载呢？&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;因为对于硬盘来说，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;个扇区只有&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;512&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;字节，早期操作系统的活比较少的时候可以这么加载，可现代的操作系统已经远远大于&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;512&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;字节，所以只能先运行一个加载程序，然后由加载程序来完成操作系统的加载。&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;那么操作系统加载进来之后干什么呢，这个就得了解下&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;CPU&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;了。对于&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;x86&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;系列的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;CPU&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;，操作系统会要开启&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;CPU&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;的段式寻址、分页存储、对&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;CPU&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;进行设置然后进入保护模式等（&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;x86&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;CPU&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;默认情况是只在保护模式下运行的，并且不使用段式寻址和分页的功能），对于别的系列的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;CPU&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;，如&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;ARM&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;等，也需要根据&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;CPU&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;产品的说明文档对&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;CPU&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;进行相应的设置来开启&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;CPU&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;所具有的特定功能。在这之后，会在内存上开辟出操作系统自己的栈空间和堆空间，初始化机器的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;IO&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;。这些做完了之后，对于图形界面的操作系统，就会运行图形界面程序，对于命令行界面的操作系统就会去运行命令行程序（就是常听到的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;Shell&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;）。然后就是我们平时看到的操作系统的界面了，这就算是启动完成了。&lt;/span&gt;&lt;font face="宋体"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='line-height: 115%; font-family: 宋体; font-size: 11pt; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: "Times New Roman"; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA;'&gt;理论到这里就结束了，开始我们的实践吧。开始之前先把启动项目换成&lt;/span&gt;&lt;/font&gt;&lt;span style='line-height: 115%; font-family: "Calibri","sans-serif"; font-size: 11pt; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: "Times New Roman"; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA;' lang="EN-US"&gt;Cosmos.Shell.Guess&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/li0803/无标题1.jpg" width="192" height="50" /&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;再说明一下，&lt;span style="color: red;"&gt;本版本使用&lt;/span&gt;&lt;/span&gt;&lt;span style="color: red;" lang="EN-US"&gt;&lt;font face="Calibri"&gt;VS2010&lt;/font&gt;&lt;/span&gt;&lt;span style="color: red; font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;编译之后似乎无法正常运行&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;，这里是我个人的理解：里程碑&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;1&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;的程序还是&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;VS2008&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;的项目，如果使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;VS2010&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;的朋友在打开项目之后会提示升级，升级完后编译会出现部分无法编译通过的情况，是因为升级之后部分项目升级成使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;.net 4.0&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;的框架，而部分项目还是用的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;.net 2.0&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;或&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;3.5&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;framework&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;，当使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;.net 2.0&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;或&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;.net 3.5&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;的项目引用了&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;.net 4.0&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;项目的程序集时，是无法通过编译的，这时尽管把这些项目该为使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;.net 4.0&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;framework&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;后可以正常启动进到编译界面，但是编译操作系统的过程中会出现&amp;#8220;未将引用设置到对象&amp;#8221;错误，原因不明&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&amp;#8230;&amp;#8230;&amp;#8230;..&lt;/font&gt;&lt;/span&gt;&lt;font face="宋体"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;span style='line-height: 115%; font-family: 宋体; font-size: 11pt; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: "Times New Roman"; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA;'&gt;好了，了解了流程就直接上代码，跟着代码&lt;a name="_GoBack"&gt;&lt;/a&gt;逐行进行说明，找到&lt;/span&gt;&lt;span style='line-height: 115%; font-family: "Calibri","sans-serif"; font-size: 11pt; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: "Times New Roman"; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA;' lang="EN-US"&gt;Program&lt;/span&gt;&lt;span style='line-height: 115%; font-family: 宋体; font-size: 11pt; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: "Times New Roman"; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA;'&gt;文件，定位到以下代码&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style='line-height: 115%; font-family: 宋体; font-size: 11pt; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: "Times New Roman"; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA;'&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: rgb(128, 128, 128);"&gt;///&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);"&gt;///&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;为什么这个是程序的开始函数，请看小弟的上一篇拙文&amp;nbsp;:)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);"&gt;///&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;publicstaticvoidInit()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;初始化硬件&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Kernel.Boot.Default();&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;加载一些在硬件设置完毕之后，程序启动之前需要运行的一些东西，COSMOS中每一个需要在这里运行的东西叫做一个Stage（不知道操作系统理论中是不是有这么一个概念？），比如说一些欢迎词和版权声明之类的。这加载进来的是一个欢迎语的Stage&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Kernel.Staging.DefaultStageQueue&amp;nbsp;stages&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;newCosmos.Kernel.Staging.DefaultStageQueue();&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;运行上一步加载的Stage&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;stages.Run();&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;剩下的大家应该都能看得懂了&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Randommt&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;newRandom();&lt;br /&gt;intnum&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;mt.Next();&lt;br /&gt;&lt;br /&gt;System.Console.WriteLine(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;I&amp;nbsp;am&amp;nbsp;thinking&amp;nbsp;of&amp;nbsp;a&amp;nbsp;number&amp;nbsp;between&amp;nbsp;0&amp;nbsp;and&amp;nbsp;100.&amp;nbsp;What&amp;nbsp;is&amp;nbsp;it?&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;System.Console.ForegroundColor&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;ConsoleColor.Blue;&lt;br /&gt;System.Console.Write(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Take&amp;nbsp;a&amp;nbsp;guess:&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;System.Console.ForegroundColor&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;ConsoleColor.White;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;short&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;guess&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;short&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.Parse(System.Console.ReadLine());&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;while&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;(guess&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;!=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;num)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;System.Console.ForegroundColor&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;ConsoleColor.Red;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;(guess&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;num)&lt;br /&gt;System.Console.WriteLine(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Too&amp;nbsp;high.&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;else&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;System.Console.WriteLine(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Too&amp;nbsp;low.&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&lt;br /&gt;System.Console.ForegroundColor&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;ConsoleColor.Blue;&lt;br /&gt;System.Console.Write(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Take&amp;nbsp;another&amp;nbsp;guess:&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;System.Console.ForegroundColor&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;ConsoleColor.White;&lt;br /&gt;guess&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;short&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.Parse(System.Console.ReadLine());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;System.Console.WriteLine(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;You&amp;nbsp;got&amp;nbsp;it!!!!&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&lt;br /&gt;stages.Teardown();&lt;br /&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p class="MsoNormal"&gt;&lt;font face="宋体"&gt;&lt;br /&gt;&lt;/font&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;主要分析一下&lt;/span&gt;&lt;span style="font-family: Consolas;" lang="EN-US"&gt;Kernel.&lt;span style="color: rgb(43, 145, 175);"&gt;Boot&lt;/span&gt;.Default()&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Consolas; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Consolas; mso-bidi-font-family: Consolas;"&gt;这个函数干了什么事，前面一大堆理论中关于&lt;/span&gt;&lt;span style="font-family: Consolas;" lang="EN-US"&gt;CPU&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Consolas; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Consolas; mso-bidi-font-family: Consolas;"&gt;，内存，&lt;/span&gt;&lt;span style="font-family: Consolas;" lang="EN-US"&gt;IO&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Consolas; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Consolas; mso-bidi-font-family: Consolas;"&gt;初始化这些的操作都是在这里面完成的&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;font face="宋体"&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;&lt;font face="宋体"&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;Default()&amp;nbsp;{&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;Init&amp;nbsp;Heap&amp;nbsp;first&amp;nbsp;-&amp;nbsp;Hardware&amp;nbsp;loads&amp;nbsp;devices&amp;nbsp;and&amp;nbsp;they&amp;nbsp;need&amp;nbsp;heap&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;居然是先在内存中初始化堆(就是开辟堆空间)&amp;nbsp;&amp;nbsp;&amp;nbsp;还以为是先对CPU进行设置呢&amp;#8230;&amp;#8230;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;初始化堆的过程其实就是一个在系统中建立各种不同的对象的过程，用这些对象来对内存进行管理&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Heap.CheckInit();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;现在该是设置CPU和初始化IO了，稍后对该函数进行分析&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cosmos.Hardware.PC.Global.Init();&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;Now&amp;nbsp;init&amp;nbsp;kernel&amp;nbsp;devices&amp;nbsp;and&amp;nbsp;rest&amp;nbsp;of&amp;nbsp;kernel&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;对设备进行初始化，看名字这应该是个键盘&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Keyboard.Initialize();&lt;br /&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p class="MsoNormal"&gt;&lt;/p&gt;&lt;/font&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;span style='line-height: 115%; font-family: 宋体; font-size: 11pt; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: "Times New Roman"; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA;'&gt;再看一下&lt;/span&gt;&lt;span style='color: black; line-height: 115%; font-family: 新宋体; font-size: 9pt; mso-bidi-font-family: "Times New Roman"; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA;' lang="EN-US"&gt;Cosmos.Hardware.PC.&lt;/span&gt;&lt;span style='color: rgb(43, 145, 175); line-height: 115%; font-family: 新宋体; font-size: 9pt; mso-bidi-font-family: "Times New Roman"; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA;' lang="EN-US"&gt;Global&lt;/span&gt;&lt;span style='color: black; line-height: 115%; font-family: 新宋体; font-size: 9pt; mso-bidi-font-family: "Times New Roman"; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA;' lang="EN-US"&gt;.Init()&lt;/span&gt;&lt;span style='color: black; line-height: 115%; font-family: 新宋体; font-size: 11pt; mso-bidi-font-family: "Times New Roman"; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA;'&gt;里面做了什么&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style='color: black; line-height: 115%; font-family: 新宋体; font-size: 11pt; mso-bidi-font-family: "Times New Roman"; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA;'&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;" onclick="cnblogs_code_show('2effd9ca-ac6c-4198-be3c-d13d9222a4c2')"&gt;&lt;img style="display: none;" id="code_img_opened_2effd9ca-ac6c-4198-be3c-d13d9222a4c2" class="code_img_opened" onclick="cnblogs_code_hide('2effd9ca-ac6c-4198-be3c-d13d9222a4c2',event)" src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif"&gt;&lt;div id="cnblogs_code_open_2effd9ca-ac6c-4198-be3c-d13d9222a4c2" class="cnblogs_code_hide"&gt;&lt;div&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;Init()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;终于到CPU了&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;这里先是new&amp;nbsp;了一个处理器，但是从函数的带来看这个处理器什么都没做，那玄机就是在Processor这个类的构造函数里面了。跟进去可以看到，可以看到构造函数里面创建了GDT（简单的说就是对于x86的CPU，如果要使用保护模式的话就需要创建一个GDT，并对它进行设置来开启CPU的保护模式功能），但是，由于是MS1(里程碑1)，实现程度还很小，创建GDT只是一个空操作，实际什么也没做，估计会在后续版本中添加进来。&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;mProcessor&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;Processor();&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;对中断控制器&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Bus.CPU.PIC.Init();&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;All&amp;nbsp;old..&amp;nbsp;need&amp;nbsp;to&amp;nbsp;port&amp;nbsp;----------------&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;对串口进行初始化&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;HW.Serial.InitSerial(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;对调试工具进行初始化(这个应该是在初期才使用的吧，商业操作系统上在这里应该没有调试相关的代码)&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HW.DebugUtil.Initialize();&lt;br /&gt;HW.DebugUtil.SendMessage(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Logging&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Initialized!&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;初始化时钟？不知道有啥用&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HW.PIT.Initialize(Tick);&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;Partially&amp;nbsp;new&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;初始化中断处理程序，此处是挂在不同的处理程序到对应的中断向量号上&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Interrupts.Init();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;end&amp;nbsp;partially&amp;nbsp;new&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;初始化ATA存储设备，通常指的是硬盘，此处传入的参数是一个委托，委托内容为一个死循环，也就是没有做任何实现，估计以后会补上&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;HW.Storage.ATA.Initialize(Sleep);&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;创建IDT，如果要使用CPU的分页功能就必须创建一个IDT，并对其进行设置。这里这个函数也是没有做任何实现，因为还是MS1，COSMOS能做的事情还很少，没必要使用到CPU的分页功能。&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HW.CPU.CreateIDT();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;end&amp;nbsp;old&amp;nbsp;-----------------&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;把键盘添加到系统设备中&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HW.Device.Add(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;Bus.CPU.Keyboard());&lt;br /&gt;}&lt;/span&gt;&lt;font face="宋体"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;这样就算是基本完成了，当然，对于不同的操作系统，初始化的流程可能会不一样，这得根据实际的硬件情况来决定。&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;以上的初始化函数中大量调用了这个操作：&lt;/span&gt;&lt;span style="color: blue; font-family: 新宋体; font-size: 10pt;" lang="EN-US"&gt;void&lt;/span&gt;&lt;span style="color: black; font-family: 新宋体; font-size: 10pt;" lang="EN-US"&gt;&amp;nbsp;Write8(&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175); font-family: 新宋体; font-size: 10pt;" lang="EN-US"&gt;UInt16&lt;/span&gt;&lt;span style="color: black; font-family: 新宋体; font-size: 10pt;" lang="EN-US"&gt;&amp;nbsp;aPort,&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue; font-family: 新宋体; font-size: 10pt;" lang="EN-US"&gt;byte&lt;/span&gt;&lt;span style="color: black; font-family: 新宋体; font-size: 10pt;" lang="EN-US"&gt;&amp;nbsp;aData)&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;这个是直接往端口中写入数据，根据&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;IBM-PC&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;兼容机的端口说明，对不同的端口进行初始化其实就是往相应的端口中写入不同的数据（但通常都是写入数据&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;0&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;）&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;这里完了之后我们再跳回到上一层函数，看看&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175); line-height: 115%; font-family: 新宋体; font-size: 9pt;" lang="EN-US"&gt;Keyboard&lt;/span&gt;&lt;span style="color: black; line-height: 115%; font-family: 新宋体; font-size: 9pt;" lang="EN-US"&gt;.Initialize()&lt;/span&gt;&lt;span style="color: black; line-height: 115%; font-family: 新宋体; font-size: 9pt;"&gt;里面做了什么&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;" onclick="cnblogs_code_show('72ffe6d6-2d72-4988-92e0-38e440f97c14')"&gt;&lt;font face="宋体"&gt;&lt;img style="display: none;" id="code_img_opened_72ffe6d6-2d72-4988-92e0-38e440f97c14" class="code_img_opened" onclick="cnblogs_code_hide('72ffe6d6-2d72-4988-92e0-38e440f97c14',event)" src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif"&gt;&lt;/font&gt;&lt;div id="cnblogs_code_open_72ffe6d6-2d72-4988-92e0-38e440f97c14" class="cnblogs_code_hide"&gt;&lt;div&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;这是一个键盘设备的初始化函数，对于一个设备，COSMOS中使用相应的类和对象来实现设备的功能，以后支持的设备多了的话，这些初始化函数也可能会增多。&lt;/span&gt;&lt;/font&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;Initialize()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mBuffer&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;Queue&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;uint&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(BufferSize);&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;Old&lt;/span&gt;&lt;/font&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Hardware.Keyboard.Initialize(HandleScancode);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;New&lt;/span&gt;&lt;/font&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mKeys&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;List&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;KeyMapping&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;128&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;以下都是添加字符的映射关系进映射关系表&lt;/span&gt;&lt;/font&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;#region&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;Letters&lt;/span&gt;&lt;/font&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;font face="宋体"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/font&gt;&lt;/span&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x10&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;q&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x100000&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Q&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x11&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;w&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x110000&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;W&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x12&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;e&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x120000&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;E&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x13&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;r&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x130000&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;r&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x14&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;t&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x140000&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;T&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x15&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;y&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x150000&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Y&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x16&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;u&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x160000&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;U&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x17&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;i&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x170000&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;I&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x18&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;o&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x180000&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;O&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x19&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;p&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x190000&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;P&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x1E&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;a&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x1E0000&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;A&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x1F&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;s&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x1F0000&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;S&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x20&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;d&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x200000&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;D&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x21&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;f&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x210000&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;F&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x22&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;g&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x220000&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;G&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x23&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;h&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x230000&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;H&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x24&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;j&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x240000&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;J&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x25&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;k&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x250000&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;K&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x26&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;l&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x260000&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;L&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x2C&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;z&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x2C0000&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Z&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x2D&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;x&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x2D0000&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;X&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x2E&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;c&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x2E0000&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;C&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x2F&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;v&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x2F0000&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;V&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x30&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x300000&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;B&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x31&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;n&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x310000&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;N&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x32&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;m&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x320000&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;M&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;#endregion&lt;/span&gt;&lt;/font&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;font face="宋体"&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;#region&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;digits&lt;/span&gt;&lt;/font&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;font face="宋体"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/font&gt;&lt;/span&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x1&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;`&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x10000&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;~&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x2&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x20000&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;!&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x3&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;2&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x30000&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;@&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x4&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;3&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x40000&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;#&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x5&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;4&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x50000&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;$&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x6&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;5&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x60000&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;%&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x7&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;6&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x70000&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;^&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x8&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;7&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x80000&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x9&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;8&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x90000&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;*&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0xA&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;9&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0xA0000&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0xB&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0xB0000&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;#endregion&lt;/span&gt;&lt;/font&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;font face="宋体"&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;#region&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;Special&lt;/span&gt;&lt;/font&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;font face="宋体"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/font&gt;&lt;/span&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x1C&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;\n&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x1C0000&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;\n&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x39&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x390000&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x0E&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;\u0968&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x0E0000&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;\u0968&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;#endregion&lt;/span&gt;&lt;/font&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;font face="宋体"&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;#region&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;Punctuation&lt;/span&gt;&lt;/font&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;font face="宋体"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/font&gt;&lt;/span&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x34&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0x340000&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;#endregion&lt;/span&gt;&lt;/font&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;font face="宋体"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p class="MsoNormal"&gt;&lt;font face="宋体"&gt;&lt;br /&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;好了，硬件的设置（初始化）总算完了，让我们回到最上层的函数看看接下来的是什么。&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;在这之后操作系统的任务就算是基本完成了，剩下的就应该是程序的调度运行的工作了，从源代码中可以看到&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;COSMOS&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;是直接运行了一个猜数的程序，我们看一下运行截图：&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/li0803/无标题3.jpg" width="628" height="375" /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;好了，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;COSMOS MS1&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;的启动流程和运行到这里就算是结束了。但是还有几个问题没有解开，&lt;/span&gt;&lt;span style="line-height: 115%; font-family: 宋体; font-size: 12pt; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"&gt;比如：&lt;/span&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;System.&lt;span style="color: rgb(43, 145, 175);"&gt;Console&lt;/span&gt;.WriteLine&lt;/span&gt;&lt;span style="line-height: 115%; font-family: 宋体; font-size: 12pt; mso-ascii-font-family: Consolas; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Consolas; mso-bidi-font-family: Consolas;"&gt;（&lt;/span&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;string&lt;/span&gt;&lt;span style="line-height: 115%; font-family: 宋体; font-size: 12pt; mso-ascii-font-family: Consolas; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Consolas; mso-bidi-font-family: Consolas;"&gt;）这个函数。对于在&lt;/span&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;.net framework&lt;/span&gt;&lt;span style="line-height: 115%; font-family: 宋体; font-size: 12pt; mso-ascii-font-family: Consolas; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Consolas; mso-bidi-font-family: Consolas;"&gt;环境下编程的朋友可能还没有意识到，问题在什么地方。&lt;/span&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%; font-family: 宋体; font-size: 12pt; mso-ascii-font-family: Consolas; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Consolas; mso-bidi-font-family: Consolas;"&gt;首先&lt;/span&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;System.&lt;span style="color: rgb(43, 145, 175);"&gt;Console&lt;/span&gt;.WriteLine&lt;/span&gt;&lt;span style="line-height: 115%; font-family: 宋体; font-size: 12pt; mso-ascii-font-family: Consolas; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Consolas; mso-bidi-font-family: Consolas;"&gt;是向显示器上显示字符，但是在我们刚才的代码中没有看到与显示器设备初始化相关的代码，在&lt;/span&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;.net &lt;/span&gt;&lt;span style="line-height: 115%; font-family: 宋体; font-size: 12pt; mso-ascii-font-family: Consolas; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Consolas; mso-bidi-font-family: Consolas;"&gt;环境下之所以能够向显示器上输出字符是因为&lt;/span&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;.net framework&lt;/span&gt;&lt;span style="line-height: 115%; font-family: 宋体; font-size: 12pt; mso-ascii-font-family: Consolas; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Consolas; mso-bidi-font-family: Consolas;"&gt;在程序启动之前已经进行了这部份相关代码的加载，当程序中遇到&lt;/span&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;System.&lt;span style="color: rgb(43, 145, 175);"&gt;Console&lt;/span&gt;.WriteLine&lt;/span&gt;&lt;span style="line-height: 115%; font-family: 宋体; font-size: 12pt; mso-ascii-font-family: Consolas; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Consolas; mso-bidi-font-family: Consolas;"&gt;类似的函数调用时，其实是调用的&lt;/span&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;.net framework&lt;/span&gt;&lt;span style="line-height: 115%; font-family: 宋体; font-size: 12pt; mso-ascii-font-family: Consolas; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Consolas; mso-bidi-font-family: Consolas;"&gt;中的代码来实现的，这就是为什么我们在编写&lt;/span&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;.net &lt;/span&gt;&lt;span style="line-height: 115%; font-family: 宋体; font-size: 12pt; mso-ascii-font-family: Consolas; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Consolas; mso-bidi-font-family: Consolas;"&gt;程序的时候需要引入相应的&lt;/span&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;dll&lt;/span&gt;&lt;span style="line-height: 115%; font-family: 宋体; font-size: 12pt; mso-ascii-font-family: Consolas; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Consolas; mso-bidi-font-family: Consolas;"&gt;，这些加载代码就在这些&lt;/span&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;dll&lt;/span&gt;&lt;span style="line-height: 115%; font-family: 宋体; font-size: 12pt; mso-ascii-font-family: Consolas; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Consolas; mso-bidi-font-family: Consolas;"&gt;里面。&lt;/span&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%; font-family: 宋体; font-size: 12pt; mso-ascii-font-family: Consolas; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Consolas; mso-bidi-font-family: Consolas;"&gt;但是&lt;/span&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;COSMOS&lt;/span&gt;&lt;span style="line-height: 115%; font-family: 宋体; font-size: 12pt; mso-ascii-font-family: Consolas; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Consolas; mso-bidi-font-family: Consolas;"&gt;是独立于&lt;/span&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;.net framework&lt;/span&gt;&lt;span style="line-height: 115%; font-family: 宋体; font-size: 12pt; mso-ascii-font-family: Consolas; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Consolas; mso-bidi-font-family: Consolas;"&gt;来运行的，也就是说&lt;/span&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;COSMOS&lt;/span&gt;&lt;span style="line-height: 115%; font-family: 宋体; font-size: 12pt; mso-ascii-font-family: Consolas; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Consolas; mso-bidi-font-family: Consolas;"&gt;在运行时是没加载过任何&lt;/span&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;.net framework&lt;/span&gt;&lt;span style="line-height: 115%; font-family: 宋体; font-size: 12pt; mso-ascii-font-family: Consolas; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Consolas; mso-bidi-font-family: Consolas;"&gt;中的&lt;/span&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;dll&lt;/span&gt;&lt;span style="line-height: 115%; font-family: 宋体; font-size: 12pt; mso-ascii-font-family: Consolas; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Consolas; mso-bidi-font-family: Consolas;"&gt;，这部分功能的实现&lt;/span&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;COSMOS&lt;/span&gt;&lt;span style="line-height: 115%; font-family: 宋体; font-size: 12pt; mso-ascii-font-family: Consolas; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Consolas; mso-bidi-font-family: Consolas;"&gt;是通过编写自己的程序库（&lt;/span&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;Plugs&lt;/span&gt;&lt;span style="line-height: 115%; font-family: 宋体; font-size: 12pt; mso-ascii-font-family: Consolas; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Consolas; mso-bidi-font-family: Consolas;"&gt;）来完成的，这个部分上一篇文章介绍&lt;/span&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;IL2CPU&lt;/span&gt;&lt;span style="line-height: 115%; font-family: 宋体; font-size: 12pt; mso-ascii-font-family: Consolas; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Consolas; mso-bidi-font-family: Consolas;"&gt;编译器时小小地涉及了一下，更多的内容将在下一遍文章中说明，呵呵（诶呀！谁扔过来的鸡蛋！）&lt;/span&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%; font-family: 宋体; font-size: 12pt; mso-ascii-font-family: Consolas; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Consolas; mso-bidi-font-family: Consolas;"&gt;欢迎大家实践学习交流，任何意见和错误都欢迎指出，一起学习，共同进步&lt;/span&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 12pt;"&gt; &lt;/span&gt;&lt;span style="line-height: 115%; font-family: Wingdings; font-size: 12pt; mso-ascii-font-family: Consolas; mso-hansi-font-family: Consolas; mso-char-type: symbol; mso-symbol-font-family: Wingdings; mso-bidi-font-family: Consolas;" lang="EN-US"&gt;&lt;span style="mso-char-type: symbol; mso-symbol-font-family: Wingdings;"&gt;J&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 9.5pt;" lang="EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%; font-family: 宋体; font-size: 9.5pt; mso-ascii-font-family: Consolas; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Consolas; mso-bidi-font-family: Consolas;"&gt;广告时间：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://hundre.taobao.com/"&gt;&lt;span style="line-height: 115%; font-family: 宋体; font-size: 9.5pt; mso-ascii-font-family: Consolas; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Consolas; mso-bidi-font-family: Consolas;" lang="EN-US"&gt;&lt;span lang="EN-US"&gt;&lt;font color="#0000ff"&gt;欢迎光临小弟的淘宝话费充值小店捧场，呵呵&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 9.5pt;" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%; font-family: 宋体; font-size: 9.5pt; mso-ascii-font-family: Consolas; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Consolas; mso-bidi-font-family: Consolas;"&gt;参考资料：&lt;/span&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 9.5pt;" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://s.click.taobao.com/t_8?e=7HZ6jHSTZPxyq1Urnw5sx11hsIrHgQjbu8v6Ym%2BHh6Vn&amp;amp;p=mm_10791315_0_0"&gt;&lt;font color="#0000ff"&gt;&lt;span style="line-height: 115%; font-family: 宋体; font-size: 9.5pt; mso-ascii-font-family: Consolas; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Consolas; mso-bidi-font-family: Consolas;" lang="EN-US"&gt;&lt;span lang="EN-US"&gt;《程序员的自我修养&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;#8212;&lt;/span&gt;&lt;span style="line-height: 115%; font-family: 宋体; font-size: 9.5pt; mso-ascii-font-family: Consolas; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Consolas; mso-bidi-font-family: Consolas;" lang="EN-US"&gt;&lt;span lang="EN-US"&gt;连接、装载与库》&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 9.5pt;" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://s.click.taobao.com/t_8?e=7HZ6jHSTZT6cFOrdSGHldWtiUJEmIwxbnymf6RxYe4u1&amp;amp;p=mm_10791315_0_0"&gt;&lt;font color="#0000ff"&gt;&lt;span style="line-height: 115%; font-family: 宋体; font-size: 9.5pt; mso-ascii-font-family: Consolas; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Consolas; mso-bidi-font-family: Consolas;" lang="EN-US"&gt;&lt;span lang="EN-US"&gt;《操作系统的设计与实现》&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 9.5pt;"&gt;--&lt;/span&gt;&lt;span style="line-height: 115%; font-family: 宋体; font-size: 9.5pt; mso-ascii-font-family: Consolas; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Consolas; mso-bidi-font-family: Consolas;" lang="EN-US"&gt;&lt;span lang="EN-US"&gt;上册&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 9.5pt;" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://s.click.taobao.com/t_1?i=oBV%2FbG705DO2Rg%3D%3D&amp;amp;p=mm_10791315_0_0&amp;amp;n=11"&gt;&lt;font color="#0000ff"&gt;&lt;span style="line-height: 115%; font-family: 宋体; font-size: 9.5pt; mso-ascii-font-family: Consolas; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Consolas; mso-bidi-font-family: Consolas;" lang="EN-US"&gt;&lt;span lang="EN-US"&gt;《深度探索&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 9.5pt;"&gt;C++&lt;/span&gt;&lt;span style="line-height: 115%; font-family: 宋体; font-size: 9.5pt; mso-ascii-font-family: Consolas; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Consolas; mso-bidi-font-family: Consolas;" lang="EN-US"&gt;&lt;span lang="EN-US"&gt;对象模型》&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 9.5pt;" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://linux.vbird.org/"&gt;&lt;font color="#0000ff"&gt;&lt;span style="line-height: 115%; font-family: 宋体; font-size: 9.5pt; mso-ascii-font-family: Consolas; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Consolas; mso-bidi-font-family: Consolas;" lang="EN-US"&gt;&lt;span lang="EN-US"&gt;鸟哥的&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 9.5pt;"&gt;LINUX&lt;/span&gt;&lt;span style="line-height: 115%; font-family: 宋体; font-size: 9.5pt; mso-ascii-font-family: Consolas; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Consolas; mso-bidi-font-family: Consolas;" lang="EN-US"&gt;&lt;span lang="EN-US"&gt;私房菜&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 9.5pt;" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 9.5pt;" lang="EN-US"&gt;Intel Vol 3A System Programming Guide Part 1&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://s.click.taobao.com/t_1?i=oBqDr46rfVN61g%3D%3D&amp;amp;p=mm_10791315_0_0&amp;amp;n=11"&gt;&lt;font color="#0000ff"&gt;&lt;span style="line-height: 115%; font-family: 宋体; font-size: 9.5pt; mso-ascii-font-family: Consolas; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Consolas; mso-bidi-font-family: Consolas;" lang="EN-US"&gt;&lt;span lang="EN-US"&gt;《编译原理》&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;#8212;&lt;/span&gt;&lt;span style="line-height: 115%; font-family: 宋体; font-size: 9.5pt; mso-ascii-font-family: Consolas; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Consolas; mso-bidi-font-family: Consolas;" lang="EN-US"&gt;&lt;span lang="EN-US"&gt;&amp;#8220;龙书&amp;#8221;第二版&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="line-height: 115%; font-family: Consolas; font-size: 9.5pt;" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt; &lt;img src="http://www.cnblogs.com/li0803/aggbug/1997564.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/li0803/archive/2011/03/28/1997564.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/li0803/archive/2011/02/23/1962093.html</id><title type="text">Cosmos的基石：IL2CPU编译器--.net/C#开源操作系统学习系列三</title><summary type="text">由于是纯C#的开发环境，因此IL2CPU责任重大，需要实现C#语言的各种特性，包括对象的初始化、多态、事件、委托等等，当然到cosmos-12304为止，这些特性还没有全部实现（后面的应该会一步一步的都实现，不过还没有看过后面的源代码，只是猜测而已）。除此之外，IL2CPU还负责处理对.net的运行库（这个运行库并不是.net framework，这个库是COSMOS自己实现的与.net framework类似但要小很多很多的一个库，以后再讲这一部分）</summary><published>2011-02-23T03:31:00Z</published><updated>2011-02-23T03:31:00Z</updated><author><name>Hundre</name><uri>http://www.cnblogs.com/li0803/</uri></author><link rel="alternate" href="http://www.cnblogs.com/li0803/archive/2011/02/23/1962093.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/li0803/archive/2011/02/23/1962093.html"/><content type="html">&lt;p&gt;&lt;span style="font-family: 宋体"&gt;本文的代码包以&lt;/span&gt;cosmos-12304.zip&lt;span style="font-family: 宋体"&gt;为例（从这个包开始，&lt;/span&gt;COSMOS&lt;span style="font-family: 宋体"&gt;的内核算是有了个基本的雏形，就像是一颗大树在出芽前会先长出庞大的根系，现在就要破土长出第一颗芽了）&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;IL2CPU&lt;span style="font-family: 宋体"&gt;之于&lt;/span&gt;COSMOS&lt;span style="font-family: 宋体"&gt;就相当与&lt;/span&gt;GCC&lt;span style="font-family: 宋体"&gt;之于&lt;/span&gt;LINUX&lt;span style="font-family: 宋体"&gt;，查看&lt;/span&gt;COSMOS&lt;span style="font-family: 宋体"&gt;的源代码，可以发现没有一行汇编代码，就连&lt;/span&gt;BOOTLOADER&lt;span style="font-family: 宋体"&gt;也是使用&lt;/span&gt;C#&lt;span style="font-family: 宋体"&gt;语言来完成的，在&lt;/span&gt;COSMOS&lt;span style="font-family: 宋体"&gt;中很对与硬件相对应的类，如屏幕、键盘等，然后在编译的时候再由&lt;/span&gt;IL2CPU&lt;span style="font-family: 宋体"&gt;识别出这些特定的类并转换成机器指令代码代码。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;由于是纯&lt;/span&gt;C#&lt;span style="font-family: 宋体"&gt;的开发环境，因此&lt;/span&gt;IL2CPU&lt;span style="font-family: 宋体"&gt;责任重大，需要实现&lt;/span&gt;C#&lt;span style="font-family: 宋体"&gt;语言的各种特性，包括对象的初始化、多态、事件、委托等等，当然到&lt;/span&gt;cosmos-12304&lt;span style="font-family: 宋体"&gt;为止，这些特性还没有全部实现（后面的应该会一步一步的都实现，不过还没有看过后面的源代码，只是猜测而已）。除此之外，&lt;/span&gt;IL2CPU&lt;span style="font-family: 宋体"&gt;还负责处理对&lt;/span&gt;.net&lt;span style="font-family: 宋体"&gt;的运行库（这个运行库并不是&lt;/span&gt;.net framework&lt;span style="font-family: 宋体"&gt;，这个库是&lt;/span&gt;COSMOS&lt;span style="font-family: 宋体"&gt;自己实现的与&lt;/span&gt;.net framework&lt;span style="font-family: 宋体"&gt;类似但要小很多很多的一个库，以后再讲这一部分）&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;cosmos-12304&lt;span style="font-family: 宋体"&gt;这个版本的代码和现在最新的代码在文件结构上有很大的差别，之所以文章从这个代码包开始，是因为小弟从第一个源代码包开始，一点一点的挪到这里，个人感觉从这里开始终于可以大致的抓住了&lt;/span&gt;COSMOS&lt;span style="font-family: 宋体"&gt;的开发思路，目前的&lt;/span&gt;COSMOS&lt;span style="font-family: 宋体"&gt;应该可以分成两部，一部分是&lt;/span&gt;IL2CPU&lt;span style="font-family: 宋体"&gt;，一部分是操作系统内核。整个&lt;/span&gt;COSMOS&lt;span style="font-family: 宋体"&gt;项目是从&lt;/span&gt;IL2CPU&lt;span style="font-family: 宋体"&gt;开始的（从早期的代码可以看出，全都是在实现的编译器的任务），先是让&lt;/span&gt;IL2CPU&lt;span style="font-family: 宋体"&gt;能把简单的&lt;/span&gt;C#&lt;span style="font-family: 宋体"&gt;程序编译成本地程序之后，就开始实现操作系统内核，&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;随着项目的深入，&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;一遍扩展内核的功能，一遍完善&lt;/span&gt;IL2CPU&lt;span style="font-family: 宋体"&gt;编译器，小弟估计到后期&lt;/span&gt;IL2CPU&lt;span style="font-family: 宋体"&gt;将会支持全部&lt;/span&gt;C#&lt;span style="font-family: 宋体"&gt;语言乃至整个&lt;/span&gt;MSIL&lt;span style="font-family: 宋体"&gt;语言的所有特性。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;好了，废话到这该来点实质性的东西了，&lt;/span&gt;cosmos-12304&lt;span style="font-family: 宋体"&gt;中先修改启动项目为这个&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 10.5pt"&gt;该项目调用了一段脚本用来编译并启动&lt;/span&gt;&lt;span style="font-family: 'Times New Roman'; font-size: 10.5pt"&gt;COSMOS&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 10.5pt"&gt;的内核，脚本内容如下：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 10.5pt"&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: #000000"&gt;..&lt;/span&gt;&lt;span style="color: #000000"&gt;\&lt;/span&gt;&lt;span style="color: #000000"&gt;..&lt;/span&gt;&lt;span style="color: #000000"&gt;\&lt;/span&gt;&lt;span style="color: #000000"&gt;..&lt;/span&gt;&lt;span style="color: #000000"&gt;\&lt;/span&gt;&lt;span style="color: #000000"&gt;source&lt;/span&gt;&lt;span style="color: #000000"&gt;\&lt;/span&gt;&lt;span style="color: #000000"&gt;il2cpu&lt;/span&gt;&lt;span style="color: #000000"&gt;\&lt;/span&gt;&lt;span style="color: #000000"&gt;bin&lt;/span&gt;&lt;span style="color: #000000"&gt;\&lt;/span&gt;&lt;span style="color: #000000"&gt;debug&lt;/span&gt;&lt;span style="color: #000000"&gt;\&lt;/span&gt;&lt;span style="color: #000000"&gt;il2cpu.exe&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;-&lt;/span&gt;&lt;span style="color: #000000"&gt;metal&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;-&lt;/span&gt;&lt;span style="color: #000000"&gt;in:..&lt;/span&gt;&lt;span style="color: #000000"&gt;\&lt;/span&gt;&lt;span style="color: #000000"&gt;..&lt;/span&gt;&lt;span style="color: #000000"&gt;\&lt;/span&gt;&lt;span style="color: #000000"&gt;..&lt;/span&gt;&lt;span style="color: #000000"&gt;\&lt;/span&gt;&lt;span style="color: #000000"&gt;source&lt;/span&gt;&lt;span style="color: #000000"&gt;\&lt;/span&gt;&lt;span style="color: #000000"&gt;Cosmos&lt;/span&gt;&lt;span style="color: #000000"&gt;\&lt;/span&gt;&lt;span style="color: #000000"&gt;Cosmos.Shell.Console&lt;/span&gt;&lt;span style="color: #000000"&gt;\&lt;/span&gt;&lt;span style="color: #000000"&gt;bin&lt;/span&gt;&lt;span style="color: #000000"&gt;\&lt;/span&gt;&lt;span style="color: #000000"&gt;debug&lt;/span&gt;&lt;span style="color: #000000"&gt;\&lt;/span&gt;&lt;span style="color: #000000"&gt;Cosmos.Shell.Console.exe&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="color: #000000"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;-&lt;/span&gt;&lt;span style="color: #000000"&gt;plug:..&lt;/span&gt;&lt;span style="color: #000000"&gt;\&lt;/span&gt;&lt;span style="color: #000000"&gt;..&lt;/span&gt;&lt;span style="color: #000000"&gt;\&lt;/span&gt;&lt;span style="color: #000000"&gt;..&lt;/span&gt;&lt;span style="color: #000000"&gt;\&lt;/span&gt;&lt;span style="color: #000000"&gt;source&lt;/span&gt;&lt;span style="color: #000000"&gt;\&lt;/span&gt;&lt;span style="color: #000000"&gt;Cosmos&lt;/span&gt;&lt;span style="color: #000000"&gt;\&lt;/span&gt;&lt;span style="color: #000000"&gt;Cosmos.Kernel.Plugs&lt;/span&gt;&lt;span style="color: #000000"&gt;\&lt;/span&gt;&lt;span style="color: #000000"&gt;bin&lt;/span&gt;&lt;span style="color: #000000"&gt;\&lt;/span&gt;&lt;span style="color: #000000"&gt;debug&lt;/span&gt;&lt;span style="color: #000000"&gt;\&lt;/span&gt;&lt;span style="color: #000000"&gt;Cosmos.Kernel.Plugs.dll&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="color: #000000"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;-&lt;/span&gt;&lt;span style="color: #000000"&gt;out:Files&lt;/span&gt;&lt;span style="color: #000000"&gt;\&lt;/span&gt;&lt;span style="color: #000000"&gt;output.obj&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;-&lt;/span&gt;&lt;span style="color: #000000"&gt;platform:nativex86&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;-&lt;/span&gt;&lt;span style="color: #000000"&gt;asm:output.asm&lt;/div&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;脚本位于&lt;/span&gt;cosmos-12304\Build\Cosmos\ISO&lt;span style="font-family: 宋体"&gt;目录下，文件名为&lt;/span&gt;Build.bat&lt;span style="font-family: 宋体"&gt;（其实就是一段批处理程序&lt;/span&gt;.........&lt;span style="font-family: 宋体"&gt;）。设置完后&lt;/span&gt;F5&lt;span style="font-family: 宋体"&gt;启动，整个项目就开始运行了&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;成功运行的截图如下：&lt;img style="width: 631px; height: 366px" border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/li0803/C%23开源操作系统学习系列/运行图.JPG" width="631" height="366" /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;运行方式为把内核编译生成&lt;/span&gt;ISO&lt;span style="font-family: 宋体"&gt;文件，然后使用&lt;/span&gt;QEMU&lt;span style="font-family: 宋体"&gt;虚拟机加载（关于运行如何启动可以参考小弟的上一篇文章，使用的工具不太一样，但是流程是相同的）&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;好了，到这里整个项目算是运行完成了（对！就只有两行输出，雏形&lt;/span&gt;......&lt;span style="font-family: 宋体"&gt;雏形，大家见谅，就相当于可以输出一个&amp;#8220;&lt;/span&gt;hello world&lt;span style="font-family: 宋体"&gt;&amp;#8221;了）&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;&lt;span style="font-family: 宋体"&gt;接下来看看&lt;/span&gt;IL2CPU&lt;span style="font-family: 宋体"&gt;是如何把&lt;/span&gt;C#&lt;span style="font-family: 宋体"&gt;代码转换成可以独立运行的操作系统内核的，痛苦的历程开始了（小弟编译原理和操作系统原理没学好，分析这里的代码是在是太痛苦了）&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;从&lt;/span&gt;Build.bat&lt;span style="font-family: 宋体"&gt;文件中的脚本可以看出，启动的时候运行的是&lt;/span&gt;IL2CPU&lt;span style="font-family: 宋体"&gt;项目，直接来到该项目下，点开，查看，是一个&lt;/span&gt;CONSOLE&lt;span style="font-family: 宋体"&gt;类型的项目，直接来到&lt;/span&gt;Main&lt;span style="font-family: 宋体"&gt;函数里面，分析源代码可以发现，&lt;/span&gt;IL2CPU&lt;span style="font-family: 宋体"&gt;项目根据&lt;/span&gt;-in&lt;span style="font-family: 宋体"&gt;输入参数来确定要编译的程序集&lt;/span&gt;--&lt;span style="font-family: 宋体"&gt;此处输入的项目为&lt;/span&gt;Cosmos.Shell.Console&lt;span style="font-family: 宋体"&gt;项目&lt;/span&gt;--&lt;span style="font-family: 宋体"&gt;在&lt;/span&gt;Main&lt;span style="font-family: 宋体"&gt;函数中找到如下代码：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;!--&lt;br/&gt;&lt;br/&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/&gt;http://www.CodeHighlighter.com/&lt;br/&gt;&lt;br/&gt;--&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(FileStream&amp;nbsp;fs&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;FileStream(AsmFile,&amp;nbsp;FileMode.Create))&amp;nbsp;&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(StreamWriter&amp;nbsp;br&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;StreamWriter(fs))&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e.Execute(InputFile,&amp;nbsp;TargetPlatform,&amp;nbsp;br,&amp;nbsp;MetalMode,&amp;nbsp;DebugMode,&amp;nbsp;BCLDir,&amp;nbsp;Plugs);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; font-size: 10pt"&gt;主要关注这一句：&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-family: 新宋体; color: #3366ff; font-size: 10pt"&gt;e.Execute(InputFile, TargetPlatform, br, MetalMode, DebugMode, BCLDir, Plugs);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;此处&lt;/span&gt;e&lt;span style="font-family: 宋体"&gt;为一个&lt;/span&gt;ENGINE&lt;span style="font-family: 宋体"&gt;类型的对象&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;，&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;在上边有实例化的代码，跳到&lt;/span&gt;Execute&lt;span style="font-family: 宋体"&gt;方法的定义处，函数内容如下&lt;/span&gt;........&lt;span style="font-family: 宋体"&gt;额，太长了就不列出来，有兴趣的朋友可以自己查看下源代码&lt;/span&gt;&lt;span style="font-family: Wingdings"&gt;J&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;可以看到&lt;/span&gt;IL2CPU&lt;span style="font-family: 宋体"&gt;先获取了&lt;/span&gt;Cosmos.Shell.Console&lt;span style="font-family: 宋体"&gt;程序集的信息，然后存到一个本地变量中，&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 新宋体; font-size: 10pt"&gt;mCrawledAssembly = &lt;span style="color: #2b91af"&gt;AssemblyFactory&lt;/span&gt;.GetAssembly(aAssembly);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 新宋体; font-size: 10pt"&gt;然后就可以从这个变量中获取程序集都另外引用了哪些程序集，再把引用到的程序集都添加到&lt;/span&gt;&lt;span style="font-family: 新宋体; font-size: 10pt"&gt;mCrawledAssembly&lt;/span&gt;&lt;span style="font-family: 新宋体; font-size: 10pt"&gt;变量内，在mCrawledAssembly内部使用一个&lt;/span&gt;&lt;span style="font-family: 新宋体; color: #2b91af; font-size: 10pt"&gt;List&lt;/span&gt;&lt;span style="font-family: 新宋体; font-size: 10pt"&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;AssemblyDefinition&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: 新宋体; font-size: 10pt"&gt;类型的变量来存储这些程序集，留到后面生成汇编代码的时候使用（注：此处使用了MONO项目中的一些类，如&lt;span style="color: #2b91af"&gt;AssemblyFactory&lt;/span&gt;&lt;span style="color: #2b91af"&gt;、&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 新宋体; color: #2b91af; font-size: 10pt"&gt;AssemblyDefinition&lt;/span&gt;&lt;span style="font-family: 新宋体; color: black; font-size: 10pt"&gt;等&lt;/span&gt;&lt;span style="font-family: 新宋体; font-size: 10pt"&gt;，求一份MONO的类库文档，英文的也行），除此之外还加载了Plugs（插件？），目前看来，Plugs就相当于COSMOS库，COSMOS中对外部硬件的操作都通过Plugs（库）来实现，目前只实现了CONSOLE这个类，也就是说，COSMOS内核中使用的CONSOLE类不是.net framework中的CONSOLE类，而是由CONSOLE内核重新实现了的，在CONSOLE内部调用特定的对象（以后分析）来实现输出功能，当然CONSOLE实现的方法和属性都与.net framework中的一样，这样在编程的时候只需直接使用.net framework来完成操作即可，等到了编译阶段IL2CPU会自动把相应的代码转换成COSMOS的内部实现从而脱离对.net framework库的依赖。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 新宋体; font-size: 10pt"&gt;个人猜测以后Plugs会扩展成一个像.net framework一样的类库，不过.net framework的类库这么庞大&lt;/span&gt;&lt;span style="font-size: 10pt"&gt;&amp;#8230;&amp;#8230;&lt;/span&gt;&lt;span style="font-family: 新宋体; font-size: 10pt"&gt;恐怕&lt;/span&gt;&lt;span style="font-size: 10pt"&gt;&amp;#8230;&amp;#8230;&amp;#8230;&amp;#8230;&amp;#8230;&lt;img alt="" src="http://www.cnblogs.com/Emoticons/QQ/02.gif" /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 新宋体; font-size: 10pt; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes"&gt;完成以上这些操作后，&lt;font face="新宋体"&gt;&lt;span lang="EN-US"&gt;IL2CPU&lt;/span&gt;还会加入一些初始化运行时的函数：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;" onclick="cnblogs_code_show('9c723a90-3632-4e9e-bdfb-b666b0de3193')"&gt;&lt;img style="display: none" id="code_img_opened_9c723a90-3632-4e9e-bdfb-b666b0de3193" class="code_img_opened" onclick="cnblogs_code_hide('9c723a90-3632-4e9e-bdfb-b666b0de3193',event)" src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif"&gt; &lt;div id="cnblogs_code_open_9c723a90-3632-4e9e-bdfb-b666b0de3193" class="cnblogs_code_hide"&gt;&lt;div&gt;&lt;!--&lt;br/&gt;&lt;br/&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/&gt;http://www.CodeHighlighter.com/&lt;br/&gt;&lt;br/&gt;--&gt;&lt;span style="color: #000000"&gt;mMethods.Add(RuntimeEngineRefs.InitializeApplicationRef,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;QueuedMethodInformation()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Processed&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;false&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Index&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;mMethods.Count&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mMethods.Add(RuntimeEngineRefs.FinalizeApplicationRef,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;QueuedMethodInformation()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Processed&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;false&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Index&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;mMethods.Count&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="font-family: 新宋体; font-size: 9pt; mso-hansi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-no-proof: yes"&gt;和虚表（用来实现多态）的实现（对多态的底层实现不是很了解，这里只知其然并不知其所以然，惭愧）：&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #000000"&gt;&lt;div&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;" onclick="cnblogs_code_show('f626f1c6-5185-448e-902d-60ab0a715e6d')"&gt;&lt;img style="display: none" id="code_img_opened_f626f1c6-5185-448e-902d-60ab0a715e6d" class="code_img_opened" onclick="cnblogs_code_hide('f626f1c6-5185-448e-902d-60ab0a715e6d',event)" src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif"&gt; &lt;div id="cnblogs_code_open_f626f1c6-5185-448e-902d-60ab0a715e6d" class="cnblogs_code_hide"&gt;&lt;div&gt;&lt;!--&lt;br/&gt;&lt;br/&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/&gt;http://www.CodeHighlighter.com/&lt;br/&gt;&lt;br/&gt;--&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #000000"&gt;!&lt;/span&gt;&lt;span style="color: #000000"&gt;aInMetalMode)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mMethods.Add(VTablesImplRefs.LoadTypeTableRef,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;QueuedMethodInformation()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Processed&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;false&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Index&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;mMethods.Count&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mMethods.Add(VTablesImplRefs.SetMethodInfoRef,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;QueuedMethodInformation()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Processed&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;false&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Index&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;mMethods.Count&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mMethods.Add(VTablesImplRefs.SetTypeInfoRef,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;QueuedMethodInformation()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Processed&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;false&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Index&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;mMethods.Count&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mMethods.Add(VTablesImplRefs.GetMethodAddressForTypeRef,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;QueuedMethodInformation()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Processed&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;false&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Index&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;mMethods.Count&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 新宋体; font-size: 9pt; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes"&gt;完了之后会传入内核程序的入口点，这就是为什么很多语言的程序都是以&lt;font face="新宋体"&gt;&lt;span lang="EN-US"&gt;Main&lt;/span&gt;函数作为程序入口点的原因，因为编译器内部定义的就是把程序跳到&lt;span lang="EN-US"&gt;Main&lt;/span&gt;函数开始执行，如果想让别的函数作为开始函数，则在编译器中就得做相应的修改，有时候这部分内容也交由连接器来处理（有关连接器和编译器的作用在此推荐本书《程序员的自我修养&lt;/font&gt;&lt;/span&gt;&lt;span style="font-size: 9pt; mso-ascii-font-family: 新宋体; mso-fareast-font-family: 新宋体; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;font face="Times New Roman"&gt;&amp;#8212;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 新宋体; font-size: 9pt; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-no-proof: yes"&gt;连接、装载与库》）&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;!--&lt;br/&gt;&lt;br/&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/&gt;http://www.CodeHighlighter.com/&lt;br/&gt;&lt;br/&gt;--&gt;&lt;span style="color: #000000"&gt;mMethods.Add(mCrawledAssembly.EntryPoint,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;QueuedMethodInformation()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Processed&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;false&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Index&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;mMethods.Count&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="font-family: 新宋体; font-size: 9pt"&gt;之后就会调用ProcessAllMethods()方法把以上传入的所有程序集里面的方法转换成汇编代码，然后还会有些清理作用的函数，最后是调用ProcessAllStaticFields()处理一些全局的静态变量&lt;/span&gt; &lt;p&gt;&lt;span style="font-family: 新宋体; font-size: 9pt"&gt;有兴趣的朋友可以跟进代码里面研究一下转换的过程，小弟实在是顶不住了，看得眼花花、头晕晕，大家知道是这么一个流程就好，以后的编译过程基本上就是走的这么一个流程，下面是小弟总结出来的IL2CPU的编译流程图，欢迎大家拍砖：&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;/span&gt;&amp;nbsp;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/li0803/C%23开源操作系统学习系列/3-编译流程图.JPG" width="440" height="440" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;从上图中没有看到传统编译器中还需要进行的语法、词法、文法分析这几步，嘿嘿，其实这些步骤在加载之前就都已经完成了，这是因为&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Times New Roman"&gt;IL2CPU&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;中加载的需要编译的文件都是程序集文件，而&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Times New Roman"&gt;.net&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;中，可以通过反射来查看程序集中的所有定义的函数、变量之类的内容，相当于&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Times New Roman"&gt;.net&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;已经帮我们做完了语法、词法、文法分析，并把分析的结果分门别类的存放在程序集里了，我们只需要通过反射功能来查看程序集中已经分类好的信息即可。其实，上图中除了分析和汇编的操作，其他的都是把各个需要用到的程序集中的函数、变量这些东西取出来，再补充上一些额外的初始化操作。而分析和汇编的任务就是把从各个程序集中取出函数、变量翻译成本地&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Times New Roman"&gt;CPU&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;代码。在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Times New Roman"&gt;IL2CPU&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;内部，是通过逐条翻译&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Times New Roman"&gt;MSIL&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;指令来完成的。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"&gt;可以点开看一下&lt;/span&gt;&lt;span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-ansi-language: EN-US; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang="EN-US"&gt;Indy.IL2CPU.IL.X86&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"&gt;项目（最新的代码包中好像已经被更名为&lt;/span&gt;&lt;span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-ansi-language: EN-US; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang="EN-US"&gt;Cosmos.Complier.IL2CPU.IL.X86&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"&gt;）&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/li0803/C%23开源操作系统学习系列/3-X86指令列表.JPG" width="310" height="524" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;里面对每一调&lt;/span&gt;MSIL&lt;span style="font-family: 宋体"&gt;指令都写了一个与其对应的类，每一个类就是专门负责把其自己翻译成&lt;/span&gt;X86&lt;span style="font-family: 宋体"&gt;的指令。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;上面的这些函数小弟跟进去看了一下，在此以目前的水平就展开分析，展开了也说不清，但里面的东西确实都是精华，虽然复杂了点，但是对于学习面向对象程序的结构和编译器实现的朋友来说是一个很好的例子，在此推荐&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 10.5pt"&gt;最后，&lt;/span&gt;&lt;span style="font-family: 'Times New Roman'; font-size: 10.5pt"&gt;IL2CPU&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 10.5pt"&gt;再使用第三方工具，把汇编出来的汇编指令文件转换成本地&lt;/span&gt;&lt;span style="font-family: 'Times New Roman'; font-size: 10.5pt"&gt;CPU&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 10.5pt"&gt;识别的二进制文件，代码如下：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;" onclick="cnblogs_code_show('b09e19e6-201a-4fa9-981f-a367daff5320')"&gt;&lt;img style="display: none" id="code_img_opened_b09e19e6-201a-4fa9-981f-a367daff5320" class="code_img_opened" onclick="cnblogs_code_hide('b09e19e6-201a-4fa9-981f-a367daff5320',event)" src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif"&gt; &lt;div id="cnblogs_code_open_b09e19e6-201a-4fa9-981f-a367daff5320" class="cnblogs_code_hide"&gt;&lt;div&gt;&lt;!--&lt;br/&gt;&lt;br/&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/&gt;http://www.CodeHighlighter.com/&lt;br/&gt;&lt;br/&gt;--&gt;&lt;span style="color: #000000"&gt;ProcessStartInfo&amp;nbsp;xFasmStartInfo&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ProcessStartInfo();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xFasmStartInfo.FileName&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;FasmFileName;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xFasmStartInfo.Arguments&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;String.Format(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;\&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;}\&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;nbsp;\&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;/span&gt;&lt;span style="color: #800080"&gt;1&lt;/span&gt;&lt;span style="color: #000000"&gt;}\&lt;/span&gt;&lt;span style="color: #800000"&gt;""&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;AsmFile,&amp;nbsp;OutputFile);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xFasmStartInfo.UseShellExecute&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;false&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xFasmStartInfo.RedirectStandardError&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;true&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xFasmStartInfo.RedirectStandardOutput&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;true&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;fasm&amp;nbsp;=&amp;nbsp;'{0}'&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;FasmFileName);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Process&amp;nbsp;xFasm&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Process.Start(xFasmStartInfo);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xFasm.Start();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #000000"&gt;!&lt;/span&gt;&lt;span style="color: #000000"&gt;xFasm.WaitForExit(&lt;/span&gt;&lt;span style="color: #800080"&gt;60&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;1000&lt;/span&gt;&lt;span style="color: #000000"&gt;)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;||&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;xFasm.ExitCode&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;!=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;Error&amp;nbsp;while&amp;nbsp;running&amp;nbsp;FASM!&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.Write(xFasm.StandardOutput.ReadToEnd());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.Write(xFasm.StandardError.ReadToEnd());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;3&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;最后，在通过脚本，讲二进制文件转换成&lt;/span&gt;ISO&lt;span style="font-family: 宋体"&gt;文件供虚拟机加载运行：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;@REM ----------- Build ISO&lt;/p&gt;&lt;p&gt;del cosmos.iso&lt;/p&gt;&lt;p&gt;attrib files\boot\grub\stage2_eltorito -r&lt;/p&gt;&lt;p&gt;..\..\..\Tools\mkisofs\mkisofs -R -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -boot-info-table -o Cosmos.iso files&lt;/p&gt;&lt;p&gt;pause&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;@REM ----------- Start QEMU&lt;/p&gt;&lt;p&gt;cd ..\..\..\tools\qemu\&lt;/p&gt;&lt;p&gt;qemu.exe -L . -cdrom ..\..\build\Cosmos\ISO\Cosmos.iso -boot d&lt;/p&gt;&lt;p&gt;pause&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 10.5pt"&gt;最后附上一个&lt;/span&gt;&lt;span style="font-family: 'Times New Roman'; font-size: 10.5pt"&gt;comos-12304.zip&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 10.5pt"&gt;中&lt;/span&gt;&lt;span style="font-family: 'Times New Roman'; font-size: 10.5pt"&gt;IL2CPU&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 10.5pt"&gt;相关项目的说明（当然也是个人学习的总结，可能有错，仅当参考，欢迎拍砖）&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/li0803/C%23开源操作系统学习系列/3-IL2CPU项目列表.JPG" width="310" height="217" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;IL2CPU&lt;span style="font-family: 宋体"&gt;：&lt;/span&gt;IL2CPU&lt;span style="font-family: 宋体"&gt;的启动项目&lt;/span&gt;&lt;/p&gt;&lt;p&gt;IL2CPU.Tests&lt;span style="font-family: 宋体"&gt;：用来测试对&lt;/span&gt;MSIL&lt;span style="font-family: 宋体"&gt;的指令的翻译是否正确的测试项目&lt;/span&gt;&lt;/p&gt;&lt;p&gt;IL2CPUGUI:&lt;span style="font-family: 宋体"&gt;暂时无用&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Indy.IL2CPU&lt;span style="font-family: 宋体"&gt;：&lt;/span&gt;IL2CPU&lt;span style="font-family: 宋体"&gt;的编译引擎&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;，&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;主要的活动都发生在这里面&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;，&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;同时封装了用来实现&lt;/span&gt;MSIL&lt;span style="font-family: 宋体"&gt;特性的类，如垃圾收集器、多态等&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Indy.IL2CPU.Assembler&lt;span style="font-family: 宋体"&gt;：&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;实现汇编器的一些基类和一些通用的指令操作&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Indy.IL2CPU.Assembler.X86&lt;span style="font-family: 宋体"&gt;：&lt;/span&gt;X86&lt;span style="font-family: 宋体"&gt;汇编器，封装&lt;/span&gt;X86&lt;span style="font-family: 宋体"&gt;指令的实现&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Indy.IL2CPU.Assembler.X86.Native&lt;span style="font-family: 宋体"&gt;：&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;对&lt;/span&gt;X86&lt;span style="font-family: 宋体"&gt;汇编器的一些扩展，应该是用来封装一些平台特有的指令&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Indy.IL2CPU.Assembler.X86.Win32&lt;span style="font-family: 宋体"&gt;：&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;对&lt;/span&gt;X86&lt;span style="font-family: 宋体"&gt;汇编器的扩展&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;，&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;用来翻译支持&lt;/span&gt;WIN32&lt;span style="font-family: 宋体"&gt;环境下的汇编程序&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Indy.IL2CPU.IL&lt;span style="font-family: 宋体"&gt;：封装&lt;/span&gt;MSIL&lt;span style="font-family: 宋体"&gt;指令的一些基类和一些通用的操作&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Indy.IL2CPU.IL.X86&lt;span style="font-family: 宋体"&gt;：&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;与&lt;/span&gt;Indy.IL2CPU.Assembler.X86&lt;span style="font-family: 宋体"&gt;项目配合，把&lt;/span&gt;MSIL&lt;span style="font-family: 宋体"&gt;指令翻译成&lt;/span&gt;X86&lt;span style="font-family: 宋体"&gt;指令&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Indy.IL2CPU.IL.X86.Native&lt;span style="font-family: 宋体"&gt;：&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;与&lt;/span&gt;Indy.IL2CPU.Assembler.X86.Native&lt;span style="font-family: 宋体"&gt;项目配合，把&lt;/span&gt;MSIL&lt;span style="font-family: 宋体"&gt;指令翻译成一些平台支持的特有一些特性的指令&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Indy.IL2CPU.IL.X86.Win32&lt;span style="font-family: 宋体"&gt;：&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;与上面两个类似&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;，&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;翻译成&lt;/span&gt;Win32&lt;span style="font-family: 宋体"&gt;环境下的汇编指令&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Indy.IL2CPU.Plugs&lt;span style="font-family: 宋体"&gt;：封装一些用来在编译的时候处理&lt;/span&gt;Plugs&lt;span style="font-family: 宋体"&gt;的类和操作&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;最新的代码包中，以上项目的名字已经被该动，不过也只是前缀进行了改变，面的部分基本上都一样。同时个人觉得&lt;/span&gt;IL2CPU&lt;span style="font-family: 宋体"&gt;也还是很不错的编译器，学习编译原理的朋友门，小弟在次推荐一下可以研究一下&lt;/span&gt;IL2CPU&lt;span style="font-family: 宋体"&gt;的源代码，也可以写些文章出来帮小弟解惑一下，呵呵&lt;/span&gt;&lt;span style="font-family: Wingdings"&gt;J&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;好了，先写到这里吧，水平有限，写得不是很好，留下的一些问题特别是关于&lt;/span&gt;Plugs&lt;span style="font-family: 宋体"&gt;的内容小弟也会在以后对源码的学习中慢慢解开&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;如果觉得本文有点帮助的朋友楼主是很乐意接收鼓励的&lt;/span&gt;&lt;span style="font-family: Wingdings"&gt;J&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;，可以到楼主的&lt;a href="http://hundre.taobao.com/" target="_blank"&gt;&lt;span style="font-family: 宋体"&gt;淘宝充值店光顾下（欢迎收藏小店&lt;/span&gt;&amp;#8230;&amp;#8230;&lt;span style="font-family: 宋体"&gt;广告&lt;/span&gt;&amp;#8230;.&lt;span style="font-family: 宋体"&gt;广告，大家懂的&lt;/span&gt;~~~~&lt;span style="font-family: 宋体"&gt;）&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;或者点击下博客里面的广告，呵呵&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体"&gt;有大虾路过的话楼主也愿意接受鸡蛋和板砖。&lt;img alt="" src="http://www.cnblogs.com/Emoticons/QQ/15.gif" /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;img src="http://www.cnblogs.com/li0803/aggbug/1962093.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/li0803/archive/2011/02/23/1962093.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/li0803/archive/2011/02/03/1948924.html</id><title type="text">Cosmos编译--.net/C#开源操作系统学习系列二</title><summary type="text">编译过LINUX的朋友应该都熟悉Make文件吧，在这里面可以清楚的看到使用编译器把C源代码编译成二进制源代码的流程，中间干了什么都可以看得清清楚楚。但使用VS的朋友一般都是程序写好之后直接F5就运行了，后面做了什么我们根本不知道。对于COSMOS的源代码，VS只是帮我们编译成了IL的代码，这种代码无法在没有CLR环境中运行，所以VS还需要把IL代码编译为针对CPU的本地代码。这中间的流程都由MSBuild这个东西控制。对于MSBuild的介绍可以直接查看MSDN文档。总的来说这个东西的地位就相当于Make文件的地位吧，指导VS如何生成可以引导的二进制文件。</summary><published>2011-02-03T00:40:00Z</published><updated>2011-02-03T00:40:00Z</updated><author><name>Hundre</name><uri>http://www.cnblogs.com/li0803/</uri></author><link rel="alternate" href="http://www.cnblogs.com/li0803/archive/2011/02/03/1948924.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/li0803/archive/2011/02/03/1948924.html"/><content type="html">&lt;p&gt;&lt;span style="font-size: 12pt;"&gt;惶恐中放上小弟的第一篇分析作品，水平有限，文笔不济，希望各位见谅并提出意见和建议&lt;/span&gt;&lt;/p&gt;&lt;script type="text/javascript"&gt;&lt;!--google_ad_client = "ca-pub-4688426012213630";/* Word Ad 468&amp;#42;60 */google_ad_slot = "1989664125";google_ad_width = 468;google_ad_height = 60;//--&gt;&lt;/script&gt;&lt;script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;&lt;/script&gt;&lt;p class="MsoListParagraph"&gt;&lt;span style="mso-bidi-font-family: 宋体; mso-bidi-theme-font: minor-fareast;" lang="EN-US"&gt;&lt;span style="mso-list: Ignore;"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;一、&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;启动之前&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;VS&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;的便捷同时也掩盖了一个操作系统从源代码转换到二进制文件的中间流程，所以首先先从源代码编译下手，先弄清楚&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;VS&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;是怎么把&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;C#&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;源代码编译成可引导启动的二进制代码。&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;本人使用的源代码包为&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;cosmos-72205.zip&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;对于&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;VS&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;需要额外安装：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;VS2010 SDK&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoListParagraph"&gt;&lt;font face="Calibri"&gt;&lt;span style="mso-bidi-font-family: 宋体; mso-bidi-theme-font: minor-fareast;" lang="EN-US"&gt;&lt;span style="font-size: 12pt;"&gt;二、&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt;" lang="EN-US"&gt;MSBuild&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;编译过&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;LINUX&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;的朋友应该都熟悉&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;Make&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;文件吧，在这里面可以清楚的看到使用编译器把&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;C&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;源代码编译成二进制源代码的流程，中间干了什么都可以看得清清楚楚。但使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;VS&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;的朋友一般都是程序写好之后直接&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;F5&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;就运行了，后面做了什么我们根本不知道。对于&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;COSMOS&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;的源代码，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;VS&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;只是帮我们编译成了&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;IL&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;的代码，这种代码无法在没有&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;CLR&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;环境中运行，所以&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;VS&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;还需要把&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;IL&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;代码编译为针对&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;CPU&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;的本地代码。这中间的流程都由&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;MSBuild&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;这个东西控制。对于&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;MSBuild&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;的介绍可以直接查看&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;MSDN&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;文档。总的来说这个东西的地位就相当于&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;Make&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;文件的地位吧，指导&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;VS&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;如何生成可以引导的二进制文件。&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoListParagraph"&gt;&lt;span style="mso-bidi-font-family: 宋体; mso-bidi-theme-font: minor-fareast;" lang="EN-US"&gt;&lt;span style="mso-list: Ignore;"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;三、&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;编译&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;Cosmos&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;首先先运行解压出来的文件夹里的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;Build/VSIP/install.bat&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;文件，这个好像是用安装&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;Cosmos&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;的编译环境的。安装完成，直接双击&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;Source/cosmos.sln&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;文件&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;(&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;在这之前需要先安装&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;VS2010 SDK)&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;即可浏览全部源代码文件（激动&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;~~~~&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;选择&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;COSMOS&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;的主要原因）。打开之后得先改一下启动项目，在次修改成&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;Breakpoints&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;这个项目&lt;/span&gt;&lt;span style="mso-no-proof: yes;" lang="EN-US"&gt;&lt;v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"&gt;&lt;font face="Calibri"&gt; &lt;v:stroke joinstyle="miter"&gt;&lt;/v:stroke&gt;&lt;v:formulas&gt;&lt;v:f eqn="if lineDrawn pixelLineWidth 0"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @0 1 0"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum 0 0 @1"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @2 1 2"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @3 21600 pixelWidth"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @3 21600 pixelHeight"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @0 0 1"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @6 1 2"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @7 21600 pixelWidth"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @8 21600 0"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @7 21600 pixelHeight"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @10 21600 0"&gt;&lt;/v:f&gt;&lt;/v:formulas&gt;&lt;v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"&gt;&lt;/v:path&gt;&lt;o:lock v:ext="edit" aspectratio="t"&gt;&lt;/o:lock&gt;&lt;/font&gt;&lt;/v:shapetype&gt;&lt;v:shape style="width: 153.75pt; height: 207.75pt; visibility: visible; mso-wrap-style: square;" id="图片_x0020_1" type="#_x0000_t75" o:spid="_x0000_i1026"&gt;&lt;v:imagedata o:title="" src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image001.png"&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/li0803/%E4%BF%AE%E6%94%B9COSMOS%E5%90%AF%E5%8A%A8%E9%A1%B9%E7%9B%AE.jpg" width="207" height="278" /&gt;&lt;/v:imagedata&gt;&lt;/v:shape&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;。然后就可以直接&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;F5&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;启动了。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;COSMOS&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;编译完成后会直接使用自带的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;Bulid&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;目录下的虚拟机来加载编译生成的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;ISO&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;文件，并运行，运行界面如下：&lt;/span&gt;&lt;span style="mso-no-proof: yes;" lang="EN-US"&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/li0803/COSMOS%E5%90%AF%E5%8A%A8%E6%88%AA%E5%9B%BE.jpg" width="558" height="322" /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoListParagraph"&gt;&lt;font face="Calibri"&gt;&lt;span style="mso-bidi-font-family: 宋体; mso-bidi-theme-font: minor-fareast;" lang="EN-US"&gt;&lt;span style="font-size: 12pt;"&gt;四、&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt;" lang="EN-US"&gt;Cosmos&lt;/span&gt;&lt;/font&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;的编译过程&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;我们可以看到，工程里面设为启动项的不是常规的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;C#&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;项目，而已&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;Cosmos&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;项目，该项目在运行&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;Build/VSIP/install.bat&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;时安装到&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;VS2010&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;中，编译的时候会调用该项目自己的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;MSBuild&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;文件来控制其编译过程，可以在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;C:\Program Files\MSBuild\Cosmos&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;该目录下找到一个&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;Cosmos.target&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;文件，用写字板打开，找到如下内容：&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left"&gt;&lt;span style="color: blue; line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21); line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;UsingTask&lt;/span&gt;&lt;span style="color: blue; line-height: 150%; font-family: Consolas; font-size: 12pt; mso-bidi-font-family: 宋体; mso-fareast-font-family: 宋体; mso-font-kerning: 0pt;" lang="EN-US"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;TaskName&lt;/span&gt;&lt;span style="color: blue; line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;=&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;Cosmos.Build.MSBuild.IL2CPU&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;AssemblyFile&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;$(VSIPDir)\Cosmos.Build.MSBuild.dll&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;&amp;nbsp;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21); font-size: 12pt;"&gt;UsingTask&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;TaskName&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;Cosmos.Build.MSBuild.NAsm&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;AssemblyFile&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;$(VSIPDir)\Cosmos.Build.MSBuild.dll&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;&amp;nbsp;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21); font-size: 12pt;"&gt;UsingTask&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;TaskName&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;Cosmos.Build.MSBuild.MakeISO&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;AssemblyFile&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;$(VSIPDir)\Cosmos.Build.MSBuild.dll&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;&amp;nbsp;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21); font-size: 12pt;"&gt;UsingTask&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;TaskName&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;Cosmos.Build.MSBuild.Ld&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;AssemblyFile&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;$(VSIPDir)\Cosmos.Build.MSBuild.dll&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;&amp;nbsp;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21); font-size: 12pt;"&gt;UsingTask&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;TaskName&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;Cosmos.Build.MSBuild.ReadNAsmMapToCosmosMap&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;AssemblyFile&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;$(VSIPDir)\Cosmos.Build.MSBuild.dll&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;&amp;nbsp;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21); font-size: 12pt;"&gt;UsingTask&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;TaskName&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;Cosmos.Build.MSBuild.ExtractMapFromElfFile&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;AssemblyFile&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;$(VSIPDir)\Cosmos.Build.MSBuild.dll&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;&amp;nbsp;/&amp;gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;font face="宋体"&gt;&lt;span style="font-size: 12pt;"&gt;个人理解，&lt;/span&gt;&lt;span style="font-size: 12pt;" lang="EN-US"&gt;Cosmos&lt;/span&gt;&lt;span style="font-size: 12pt;"&gt;项目编译时应该会加载这些&lt;/span&gt;&lt;span style="font-size: 12pt;" lang="EN-US"&gt;dll&lt;/span&gt;&lt;span style="font-size: 12pt;"&gt;进内存，在&lt;/span&gt;&lt;span style="font-size: 12pt;" lang="EN-US"&gt;Cosmos&lt;/span&gt;&lt;span style="font-size: 12pt;"&gt;项目源代码中到对应的项目，可以发现它们都直接或者间接继承自&lt;/span&gt;&lt;/font&gt;&lt;span style="color: rgb(43, 145, 175); font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;AppDomainIsolatedTask&lt;/span&gt;&lt;span style="mso-ascii-font-family: Consolas; mso-hansi-font-family: Consolas;"&gt;&lt;font face="宋体"&gt;&lt;span style="font-size: 12pt;"&gt;类，查看&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;MSDN&lt;/span&gt;&lt;span style="mso-ascii-font-family: Consolas; mso-hansi-font-family: Consolas;"&gt;&lt;font face="宋体"&gt;&lt;span style="font-size: 12pt;"&gt;，这个继承该类的类都重写了&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;execute&lt;/span&gt;&lt;span style="mso-ascii-font-family: Consolas; mso-hansi-font-family: Consolas;"&gt;&lt;font face="宋体"&gt;&lt;span style="font-size: 12pt;"&gt;方法，&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;MSBuild&lt;/span&gt;&lt;span style="mso-ascii-font-family: Consolas; mso-hansi-font-family: Consolas;"&gt;&lt;font face="宋体"&gt;&lt;span style="font-size: 12pt;"&gt;在加载这些程序集时应该是会自动运行这些程序集中继承自&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175); font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;AppDomainIsolatedTask&lt;/span&gt;&lt;span style="mso-fareast-font-family: 宋体; mso-ascii-font-family: 宋体; mso-hansi-font-family: 宋体; mso-ascii-theme-font: minor-fareast; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"&gt;&lt;font face="宋体"&gt;&lt;span style="font-size: 12pt;"&gt;的类重写的&lt;/span&gt;&lt;span style="font-size: 12pt;" lang="EN-US"&gt;execute&lt;/span&gt;&lt;span style="font-size: 12pt;"&gt;方法（运行的顺序似乎并不是按照上面的书写顺序），那么接下来我们只要再分析每一个&lt;/span&gt;&lt;span style="font-size: 12pt;" lang="EN-US"&gt;execute&lt;/span&gt;&lt;span style="font-size: 12pt;"&gt;方法，就可以明白这个&lt;/span&gt;&lt;span style="font-size: 12pt;" lang="EN-US"&gt;C#&lt;/span&gt;&lt;span style="font-size: 12pt;"&gt;源代码程序是如何编译成为本地&lt;/span&gt;&lt;span style="font-size: 12pt;" lang="EN-US"&gt;CPU&lt;/span&gt;&lt;span style="font-size: 12pt;"&gt;二进制格式的文件了（以上各个类运行时需要的参数可以在该文件的接下来的部分找到，如下：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21); font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;IL2CPU&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas;" lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;DebugMode&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;=&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;$(DebugMode)&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;br /&gt;&lt;br/&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;TraceAssemblies&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;$(TraceAssemblies)&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;br /&gt;&lt;br/&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;DebugCom&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;br /&gt;&lt;br/&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;UseNAsm&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;true&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;br /&gt;&lt;br/&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;References&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;@(ReferencePath)&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;br /&gt;&lt;br/&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;OutputFilename&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;$(TargetDir)$(MSBuildProjectName).asm&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;br /&gt;&lt;br/&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;EnableLogging&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;true&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;br /&gt;&lt;br/&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;EmitDebugSymbols&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;$(DebugSymbols)&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21); font-size: 12pt;"&gt;NAsm&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;InputFile&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;$(TargetDir)$(MSBuildProjectName).asm&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;br /&gt;&lt;br/&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;OutputFile&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;$(TargetDir)$(MSBuildProjectName).obj&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;br /&gt;&lt;br/&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;IsELF&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;$(IsELF)&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;br /&gt;&lt;br/&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;ExePath&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;$(NasmFile)&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;&amp;nbsp;/&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--&lt;/span&gt;&lt;span style="color: green; font-size: 12pt;"&gt;ELF&amp;nbsp;only&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;--&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21); font-size: 12pt;"&gt;Ld&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;CosmosBuildDir&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;$(CosmosDir)\Build&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;br /&gt;&lt;br/&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;WorkingDir&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;$(TargetDir)&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;br /&gt;&lt;br/&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;Arguments&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;-Ttext&amp;nbsp;0x500000&amp;nbsp;-Tdata&amp;nbsp;0x200000&amp;nbsp;-e&amp;nbsp;Kernel_Start&amp;nbsp;-o&amp;nbsp;'$(TargetDir)$(MSBuildProjectName).bin'&amp;nbsp;'$(TargetDir)$(MSBuildProjectName).obj'&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;br /&gt;&lt;br/&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;Condition&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;$(IsELF)&amp;nbsp;==&amp;nbsp;'true'&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21); font-size: 12pt;"&gt;Delete&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;Files&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;$(TargetDir)$(MSBuildProjectName).obj&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;Condition&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;$(IsELF)&amp;nbsp;==&amp;nbsp;'true'&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21); font-size: 12pt;"&gt;ExtractMapFromElfFile&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;InputFile&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;$(TargetDir)$(MSBuildProjectName).bin&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;br /&gt;&lt;br/&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;DebugInfoFile&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;$(TargetDir)$(MSBuildProjectName).cpdb&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;br /&gt;&lt;br/&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;WorkingDir&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;$(TargetDir)&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;br /&gt;&lt;br/&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;CosmosBuildDir&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;$(CosmosDir)\Build&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;br /&gt;&lt;br/&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;Condition&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;$(IsELF)&amp;nbsp;==&amp;nbsp;'true'&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21); font-size: 12pt;"&gt;CreateItem&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;Include&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;$(TargetDir)$(MSBuildProjectName).bin&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;Condition&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;$(IsELF)&amp;nbsp;==&amp;nbsp;'true'&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21); font-size: 12pt;"&gt;Output&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;TaskParameter&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;Include&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;br /&gt;&lt;br/&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;ItemName&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;TempFilesToCopy&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21); font-size: 12pt;"&gt;CreateItem&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21); font-size: 12pt;"&gt;Copy&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;SourceFiles&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;@(TempFilesToCopy)&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;br /&gt;&lt;br/&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;DestinationFiles&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;@(TempFilesToCopy-&amp;gt;'$(TargetDir)\%(Filename).obj')&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;br /&gt;&lt;br/&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;Condition&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;$(IsELF)&amp;nbsp;==&amp;nbsp;'true'&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21); font-size: 12pt;"&gt;Delete&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;Files&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;$(TargetDir)$(MSBuildProjectName).bin&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;Condition&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;$(IsELF)&amp;nbsp;==&amp;nbsp;'true'&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--&lt;/span&gt;&lt;span style="color: green; font-size: 12pt;"&gt;End&amp;nbsp;of&amp;nbsp;ELF&amp;nbsp;only&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;--&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--&lt;/span&gt;&lt;span style="color: green; font-size: 12pt;"&gt;binary&amp;nbsp;only&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;--&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21); font-size: 12pt;"&gt;ReadNAsmMapToCosmosMap&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;InputBaseDir&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;$(TargetDir)&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;br /&gt;&lt;br/&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;DebugInfoFile&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;$(TargetDir)$(MSBuildProjectName).cpdb&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;br /&gt;&lt;br/&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;Condition&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;$(IsELF)&amp;nbsp;==&amp;nbsp;'false'&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--&lt;/span&gt;&lt;span style="color: green; font-size: 12pt;"&gt;end&amp;nbsp;of&amp;nbsp;binary&amp;nbsp;only&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;--&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--&lt;/span&gt;&lt;span style="color: green; font-size: 12pt;"&gt;todo:&amp;nbsp;update&amp;nbsp;cxdb&amp;nbsp;to&amp;nbsp;cxdbg&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;--&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21); font-size: 12pt;"&gt;MakeISO&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;InputFile&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;$(TargetDir)$(MSBuildProjectName).obj&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;br /&gt;&lt;br/&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;OutputFile&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;$(TargetDir)$(MSBuildProjectName).iso&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;br /&gt;&lt;br/&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt;"&gt;CosmosBuildDir&lt;/span&gt;&lt;span style="color: blue; font-size: 12pt;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;$(CosmosDir)\Build&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;"&lt;span style="color: blue; font-size: 12pt;"&gt;&amp;nbsp;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;font face="宋体"&gt;&lt;span style="font-size: 12pt;"&gt;）。&lt;/span&gt;&lt;span style="font-family: Consolas;" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="mso-fareast-font-family: 宋体; mso-ascii-font-family: 宋体; mso-hansi-font-family: 宋体; mso-ascii-theme-font: minor-fareast; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;" lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="宋体"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;font face="宋体"&gt;&lt;span style="mso-fareast-font-family: 宋体; mso-ascii-font-family: 宋体; mso-hansi-font-family: 宋体; mso-ascii-theme-font: minor-fareast; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;" lang="EN-US"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt;" lang="EN-US"&gt;4&lt;/span&gt;&lt;span style="font-size: 12pt;"&gt;．&lt;span style="font-size: 12pt;" lang="EN-US"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt;"&gt;先从&lt;span style="font-size: 12pt;" lang="EN-US"&gt;Cosmos.Build.MSBuild.IL2CPU&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt;"&gt;开始。&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体"&gt;&lt;span style="mso-fareast-font-family: 宋体; mso-ascii-font-family: 宋体; mso-hansi-font-family: 宋体; mso-ascii-theme-font: minor-fareast; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast;"&gt;&lt;span style="font-size: 12pt;" lang="EN-US"&gt;Cosmos.Build.MSBuild.IL2CPU&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt;"&gt;继承自&lt;/span&gt;&lt;/font&gt;&lt;span style="color: rgb(43, 145, 175); font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;AppDomainIsolatedTask&lt;/span&gt;&lt;span style="mso-ascii-font-family: Consolas; mso-hansi-font-family: Consolas;"&gt;&lt;font face="宋体"&gt;&lt;span style="font-size: 12pt;"&gt;类，并重写了&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;execute&lt;/span&gt;&lt;span style="mso-ascii-font-family: Consolas; mso-hansi-font-family: Consolas;"&gt;&lt;font face="宋体"&gt;&lt;span style="font-size: 12pt;"&gt;方法，在&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;execute&lt;/span&gt;&lt;span style="mso-ascii-font-family: Consolas; mso-hansi-font-family: Consolas;"&gt;&lt;font face="宋体"&gt;&lt;span style="font-size: 12pt;"&gt;方法中调用实例化的&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175); font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;IL2CPUTask&lt;/span&gt;&lt;span style="mso-ascii-font-family: Consolas; mso-hansi-font-family: Consolas;"&gt;&lt;font face="宋体"&gt;&lt;span style="font-size: 12pt;"&gt;的类的&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;execute&lt;/span&gt;&lt;span style="mso-ascii-font-family: Consolas; mso-hansi-font-family: Consolas;"&gt;&lt;font face="宋体"&gt;&lt;span style="font-size: 12pt;"&gt;方法。而&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;IL2CPUTask&lt;/span&gt;&lt;span style="mso-ascii-font-family: Consolas; mso-hansi-font-family: Consolas;"&gt;&lt;font face="宋体"&gt;&lt;span style="font-size: 12pt;"&gt;类的&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;execute&lt;/span&gt;&lt;span style="mso-ascii-font-family: Consolas; mso-hansi-font-family: Consolas;"&gt;&lt;font face="宋体"&gt;&lt;span style="font-size: 12pt;"&gt;方法则负责获取程序的入口点，读取所有的程序集文件。对于小弟的这个水平来说，由于&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;IL2CPU&lt;/span&gt;&lt;span style="mso-ascii-font-family: Consolas; mso-hansi-font-family: Consolas;"&gt;&lt;font face="宋体"&gt;&lt;span style="font-size: 12pt;"&gt;编译器过于复杂，以下分析请大家以批判的角度来阅读：读取程序集文件后，应该是调用&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;IL2CPU&lt;/span&gt;&lt;span style="mso-ascii-font-family: Consolas; mso-hansi-font-family: Consolas;"&gt;&lt;font face="宋体"&gt;&lt;span style="font-size: 12pt;"&gt;编译器来把&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;IL&lt;/span&gt;&lt;span style="mso-ascii-font-family: Consolas; mso-hansi-font-family: Consolas;"&gt;&lt;font face="宋体"&gt;&lt;span style="font-size: 12pt;"&gt;代码转换成本地&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;CPU&lt;/span&gt;&lt;span style="mso-ascii-font-family: Consolas; mso-hansi-font-family: Consolas;"&gt;&lt;font face="宋体"&gt;&lt;span style="font-size: 12pt;"&gt;的汇编代码文件&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;.asm&lt;/span&gt;&lt;span style="mso-ascii-font-family: Consolas; mso-hansi-font-family: Consolas;"&gt;&lt;font face="宋体"&gt;&lt;span style="font-size: 12pt;"&gt;和支持调试用的符号文件&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;.cpdb&lt;/span&gt;&lt;font face="宋体"&gt;&lt;span style="font-size: 12pt;"&gt;。到此&lt;/span&gt;&lt;span style="font-size: 12pt;" lang="EN-US"&gt;Cosmos.Build.MSBuild.IL2CPU&lt;/span&gt;&lt;span style="font-size: 12pt;"&gt;的任务就算完成了。接下来的事情交由&lt;/span&gt;&lt;/font&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;Cosmos.Build.MSBuild.Nasm&lt;/span&gt;&lt;font face="宋体"&gt;&lt;span style="font-size: 12pt;"&gt;处理。&lt;/span&gt;&lt;span style="font-family: Consolas;" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size: 12pt;"&gt;4.2&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="color: blue; line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt; Cosmos.Build.MSBuild.Nasm&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="color: blue; line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;Cosmos.Build.MSBuild.Nasm&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt;"&gt;直接继承自&lt;/span&gt;&lt;span style="color: blue; line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;Cosmos.Build.MSBuild.BaseToolTask,&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt;"&gt;而&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;BaseToolTask&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt;"&gt;又直接继承自&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175); font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;AppDomainIsolatedTask&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;查看他们的&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;execute&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;方法内的代码，可以知道&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;Nasm&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;这个类应该是使用&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;Nasm.exe&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;（一个跨平台的汇编开发工具）这个工具把上一步转换出来的&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;.asm&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;文件编译成&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;elf&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;格式的（关于&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;elf&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;格式可以参看小弟空间里的另一篇文章&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;http://www.cnblogs.com/li0803/archive/2010/11/15/1877961.html&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;）目标文件&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;.obj,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;到此&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;Cosmos.Build.MSBuild.Nasm&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;这个类的工作也结束了，接下来由&lt;/span&gt;&lt;span style="color: blue; line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;Cosmos.Build.MSBuild.MakeISO&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt;"&gt;这个类来处理&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt; mso-bidi-font-family: 宋体; mso-fareast-font-family: 宋体; mso-font-kerning: 0pt;" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;4.3&lt;span style="color: blue; font-size: 12pt;"&gt; Cosmos.Build.MSBuild.MakeISO&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="color: blue; line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;Cosmos.Build.MSBuild.MakeISO&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt;"&gt;与&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;Nasm&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt;"&gt;类似，直接继承自&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;BaseToolTask,&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt;"&gt;间接继承自&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;AppDomainIsolatedTask&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt;"&gt;，并重写了自己的&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;execute&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt;"&gt;方法，作用是使用&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;mkisofs.exe&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt;"&gt;这个工具把上一步生成的&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;.obj&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt;"&gt;文件链接成一个&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;ISO&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt;"&gt;文件，以便虚拟机可以加载运行。其实到这一步已经得到了一个可以运行的&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;COSMOS&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt;"&gt;操作系统文件了，但得到的只是一个&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;ISO&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt;"&gt;文件，只能再虚拟机种运行，无法安装到实际的机子上，也不方便进行调试，所以&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;COSMOS&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt;"&gt;还要&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;MSBuild&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt;"&gt;做了一下的事情来生成一个&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;.bin&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt;"&gt;的二进制文件和一些支持在&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;VS&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt;"&gt;下对操作系统的源代码进行调试的&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;.cpdb&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt;"&gt;符号表文件。不知道这么说对不对，大家就仅当参考吧，不对的话也希望大家可以帮忙指正一下，呵呵：）&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-ascii-font-family: Consolas; mso-hansi-font-family: Consolas;"&gt;&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt; mso-bidi-font-family: 宋体; mso-fareast-font-family: 宋体; mso-font-kerning: 0pt;" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt; mso-bidi-font-family: 宋体; mso-fareast-font-family: 宋体; mso-font-kerning: 0pt;" lang="EN-US"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;4.4&lt;span style="color: blue; font-size: 12pt;"&gt; Cosmos.Build.MSBuild.Ld&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="color: blue; line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;Cosmos.Build.MSBuild.Ld&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt;"&gt;也与&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;Nasm&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt;"&gt;类似，直接继承自&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;BaseToolTask,&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt;"&gt;间接继承自&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;AppDomainIsolatedTask&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt;"&gt;，并重写了自己的&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;execute&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt;"&gt;方法，作用是把&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;Nasm&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt;"&gt;类中编译出来的&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;.obj&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt;"&gt;目标文件使用&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;ld.exe&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt;"&gt;工具链接成一个独立的&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;ELF&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt;"&gt;格式的本地&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;CPU&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt;"&gt;可运行的二进制文件（有关编译和链接的只是可以参考《程序员的自我修养》），然后再交由&lt;/span&gt;&lt;span style="color: blue; line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;Cosmos.Build.MSBuild.ExtractMapFromElfFile&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt;"&gt;继续处理&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-ascii-font-family: Consolas; mso-hansi-font-family: Consolas;"&gt;&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt; mso-bidi-font-family: 宋体; mso-fareast-font-family: 宋体; mso-font-kerning: 0pt;" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt; mso-bidi-font-family: 宋体; mso-fareast-font-family: 宋体; mso-font-kerning: 0pt;" lang="EN-US"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;4.5&lt;span style="color: blue; font-size: 12pt;"&gt; Cosmos.Build.MSBuild.ExtractMapFromElfFile&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="color: blue; line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;Cosmos.Build.MSBuild.ExtractMapFromElfFile&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt;"&gt;同样是直接继承自&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;BaseToolTask,&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt;"&gt;间接继承自&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;AppDomainIsolatedTask&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt;"&gt;，并重写了自己的&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;execute&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt;"&gt;方法，在&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;execute&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt;"&gt;方法中调用&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;objdump.exe&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt;"&gt;来处理上一步生成的文件。小弟也是第一次接触&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;objdump.exe&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt;"&gt;这个东西，从源代码上看应该是分析上一步编译出来的&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;.bin&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt;"&gt;文件，然后生成支持调试用的&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;.cpdb&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt;"&gt;符号表文件吧，接着再交由&lt;/span&gt;&lt;span style="color: blue; line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;Cosmos.Build.MSBuild.ReadNAsmMapToCosmosMap&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt;"&gt;做最后的处理。&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-ascii-font-family: Consolas; mso-hansi-font-family: Consolas;"&gt;&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt; mso-bidi-font-family: 宋体; mso-fareast-font-family: 宋体; mso-font-kerning: 0pt;" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt; mso-bidi-font-family: 宋体; mso-fareast-font-family: 宋体; mso-font-kerning: 0pt;" lang="EN-US"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;4.6&lt;span style="color: blue; font-size: 12pt;"&gt; Cosmos.Build.MSBuild.ReadNAsmMapToCosmosMap&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="color: blue; line-height: 150%; font-family: Consolas; font-size: 12pt; mso-bidi-font-family: 宋体; mso-fareast-font-family: 宋体; mso-font-kerning: 0pt;" lang="EN-US"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue; line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;Cosmos.Build.MSBuild.ReadNAsmMapToCosmosMap&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt;"&gt;类直接继承自&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;AppDomainIsolatedTask&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt;"&gt;类，并重写自己的&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;execute&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt;"&gt;方法，作用是从&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;Nasm&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt;"&gt;任务中生成的&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;.obj&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt;"&gt;文件中读取出地址符号映射表（什么东西？不太懂），写入自带的&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;firebird&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt;"&gt;数据库中，便于源代码跟踪调试用。&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt; mso-bidi-font-family: 宋体; mso-fareast-font-family: 宋体; mso-font-kerning: 0pt;" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt; mso-bidi-font-family: 宋体; mso-fareast-font-family: 宋体; mso-font-kerning: 0pt;" lang="EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt; mso-bidi-font-family: 宋体; mso-fareast-font-family: 宋体; mso-font-kerning: 0pt;" lang="EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt;"&gt;到此，&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt;" lang="EN-US"&gt;COSMOS&lt;/span&gt;&lt;span style="line-height: 150%; font-family: 宋体; font-size: 12pt;"&gt;的编译工作就算是全部完成了&lt;/span&gt;&lt;span style="line-height: 150%; font-family: Consolas; font-size: 12pt; mso-bidi-font-family: 宋体; mso-fareast-font-family: 宋体; mso-font-kerning: 0pt;" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/li0803/aggbug/1948924.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/li0803/archive/2011/02/03/1948924.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/li0803/archive/2011/01/31/1948215.html</id><title type="text">Cosmos开篇、本系列目录--.net/C#开源操作系统学习系列一</title><summary type="text">cosmos全称C# open source manage operation system，是一个使用C#语言基于.net framwark框架编写的开源操作系统，主页www.gocosmos.org。可从cosmos.codeplex.com获取最新的源代码。</summary><published>2011-01-31T03:48:00Z</published><updated>2011-01-31T03:48:00Z</updated><author><name>Hundre</name><uri>http://www.cnblogs.com/li0803/</uri></author><link rel="alternate" href="http://www.cnblogs.com/li0803/archive/2011/01/31/1948215.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/li0803/archive/2011/01/31/1948215.html"/><content type="html">&lt;script type="text/javascript"&gt;&lt;!--google_ad_client = "ca-pub-4688426012213630";/* Word Ad 468&amp;#42;60 */google_ad_slot = "1989664125";google_ad_width = 468;google_ad_height = 60;//--&gt;&lt;/script&gt;&lt;script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;&lt;/script&gt;&lt;p class="MsoListParagraph"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;" lang="EN-US"&gt;&lt;/span&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoListParagraph"&gt;&lt;strong&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 14pt;" lang="EN-US"&gt;cosmos&lt;/span&gt;&lt;/font&gt;&lt;span style="font-family: 宋体; font-size: 14pt;"&gt;简介&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;cosmos&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;全称&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;C# open source manage operation system&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;，是一个使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;C#&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;语言基于&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;.net framwark&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;框架编写的开源操作系统，主页&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;www.gocosmos.org&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;。可从&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;cosmos.codeplex.com&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;获取最新的源代码。&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;Cosmos&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;的源代码使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;C#&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;来编写，先把源代码编译成&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;IL&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;中间语言，然后再由专门针对该项目编写的编译器&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;IL2CPU&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;来把编译好的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;IL&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;源代码转换成本地机器码，目前处于里程碑&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;5&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;的阶段，只支持&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;x86&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;体系的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;CPU&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;。官方网站上计划以后将会提供对&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;ARM&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;MIPS&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;等其他&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;CPU&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;的支持。&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoListParagraph"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;目前在学习操作系统的知识，想找份开源的代码来学习学习，刚开始想的使用使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;LINUX&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;的，不过&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;LINUX&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;实在是在大了，而且最可气的地方是没有一个好的集成开发环境，也许也是我的能力有限，没有找到一个好的集成开发环境，查看源文件得需要一个一个文件的打开来查看，中间找到过一个&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;SharpOS&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;的开源系统，也是基于&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;C#&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;的，不过已经停止开发了&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;(&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;残念&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;&amp;#8230;..)&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;。当然&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;LINUX&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;任然是目前使用范围最广的开源操作系统，最后决定&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;Cosmos&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;的主要原因还是因为可以通过使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;VS&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;直接打开&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;.sln&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;文件，就可以浏览全部的源代码，这个便捷性对我这种菜鸟来说实在是太方便了&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;在此将开始记录我学习&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="font-size: 12pt;"&gt;Cosmos&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;操作系统的过程，也做个笔记，水平有限，文笔较差，希望大家可以多多指点，嘿嘿：）&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;本Cosmos系列目录：&lt;/span&gt;&lt;/p&gt;&lt;ol&gt;    &lt;ol&gt;&lt;li&gt;        &lt;p&gt;&lt;strong&gt;&lt;a href="http://www.cnblogs.com/li0803/archive/2011/01/31/1948215.html" target="_blank"&gt;Cosmos开篇--.net/C#开源操作系统学习系列一&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;        &lt;/li&gt;&lt;li&gt;        &lt;p&gt;&lt;strong&gt;&lt;a href="http://www.cnblogs.com/li0803/archive/2011/02/03/1948924.html" target="_blank"&gt;Cosmos编译--.net/C#开源操作系统学习系列二&lt;/a&gt;&amp;nbsp;        &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;/p&gt;        &lt;/li&gt;&lt;li&gt;        &lt;p&gt;&lt;strong&gt;&lt;a href="http://www.cnblogs.com/li0803/archive/2011/02/23/1962093.html" target="_blank"&gt;Cosmos的基石：IL2CPU编译器--.net/C#开源操作系统学习系列三&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;        &lt;/li&gt;&lt;li&gt;        &lt;p&gt;&lt;strong&gt;&lt;a href="http://www.cnblogs.com/li0803/archive/2011/03/28/1997564.html" target="_blank"&gt;Cosmos里程碑1--.net/C#开源操作系统学习系列四&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;        &lt;/li&gt;&lt;li&gt;        &lt;p&gt;&lt;strong&gt;&lt;a href="http://www.cnblogs.com/li0803/archive/2011/04/18/2020041.html" target="_blank"&gt;Cosmos的库--.net/C#开源操作系统学习系类五&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;        &lt;/li&gt;&lt;li&gt;        &lt;p&gt;&lt;strong&gt;&lt;a href="http://www.cnblogs.com/li0803/archive/2011/08/11/2134369.html" target="_blank"&gt;Plugs介绍（翻译）---- .net/C#开源操作系统学习系列六&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;        &lt;/li&gt;&lt;li&gt;        &lt;p&gt;&lt;strong&gt;&lt;a id="ctl01_TitleUrl" href="http://www.cnblogs.com/li0803/archive/2011/09/21/2184300.html"&gt;Cosmos的汇编级调试器（翻译）----.net/C#开源操作系统学习系列七&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;        &lt;/li&gt;&lt;li&gt;        &lt;p&gt;&lt;strong&gt;&lt;a id="ctl01_TitleUrl" href="http://www.cnblogs.com/li0803/archive/2011/09/28/2194658.html"&gt;Cosmos的里程碑2（Mile Stone 2）之RTL8139网卡芯片编程---- .net/C#开源操作系统学习系列八&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;        &lt;/li&gt;&lt;li&gt;        &lt;p&gt;&lt;strong&gt;&lt;a href="http://www.cnblogs.com/li0803/archive/2012/01/16/2323242.html" target="_self"&gt;Cosmos的里程碑2（Mile Stone 2）之浅尝PCI总线、设备编程--.net/C#开源操作系统学习系列九&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a id="homepage1_HomePageDays_DaysList_DayItem_0_DayList_0_TitleUrl_0" href="http://www.cnblogs.com/li0803/archive/2012/03/05/2329158.html"&gt;&lt;font color="#000080"&gt;Cosmos动手练习（基于里程碑2的代码）--.net/C#开源操作系统学习系列十&lt;/font&gt;&lt;/a&gt; &lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;        &lt;/li&gt;        &lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;    &lt;/ol&gt;&lt;/ol&gt;&lt;img src="http://www.cnblogs.com/li0803/aggbug/1948215.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/li0803/archive/2011/01/31/1948215.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
