IL系列文章之一:Say Hello to IL (转)

本文通过一个简单的HelloWorld示例介绍了IL(中间语言)的基础知识,并讲解了CLR(公共语言运行时)的工作原理,包括如何使用IL编写及运行程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

IL系列文章之一:Say Hello to IL (转)[@more@]

IL系列文章之一:XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" />

Say Hello to IL

.NET出现这么就了,很多人已经能够熟练的运用C#进行软件开发,也有一些像我这样的人喜欢去研究一下.net的内部运行机制。我这里来谈谈IL(Intermediate Language),虽然我们不太可能直接用IL来开发软件,但是IL的确是了解.net内部机制的一道大门。

Visual Studio.NET给我们提供了两个与IL有关的工具ilasm和ildasm,他们是IL编译器和IL反编译器,有关它们的使用方法大家可以参看msnD文档,我这里就不再说了。不过在开始谈论IL,我还要谈下CLR基础。

CLR(Common Language Runtime),MSDN文档也有一些对它的描述,我这里的描述只是对MSDN文档的一些补充,以使读者更好的理解CLR。CLR是.net框架的核心,可以把它想象成是一个可以运行IL code的cpu。就普通的intel CPU而言,它是依靠Register和Stack来运行程序,而CLR则是一个只依靠Stack来运行程序的CPU。举一个例子,如果我们要进行1+2的运算,则IL指令会现将1和2移到Stack的顶部再进行add运算,add把1和2从Stack顶部移走,再将运算结果3放到Stack顶部。CLR的Stack不是以Byte的形式存在,也不是以word的形式存在,而是Slot。Slot是一种能够容纳任何类型实体的结构,就是说我们能够把int放到Stack中,也可以把float放到Stack中,Stack中的内容可能是int->float->object A->object B->int,一切皆有可能。实体被移到Stack顶部的过程叫做loading(简写成ld),把实体从Stack顶部移走的过程叫做storing(简写成st)。

好,现在让我们开始和IL亲密接触吧!看看我们的第一个IL程序——“Hello World”。

.assembly PrintString {}

//Console.WriteLine("Hello, World)"

.method static public void main() il managed

{

  .entrypoint  // IL不用把Main()函数定义为程序的入口,而是用.entrypoint定义入口

  .maxstack 8  //定义Stack的最大深度为8

   // *****************************************************

  // Console.WriteLine("Hello, World)";

  // *****************************************************

  ldstr "Hello, World"  //将“Hello World”这个String移到Stack顶部

  // Call static System.Console.Writeline function

  // WriteLine()把String从Stack顶部移走,不返回任何值

  call  void [mSCOrlib]System.Console::WriteLine (class System.String)

   // *****************************************************

  ret

}

保存程序为Hello.il,然后就是编译它。打开“Visual Studio .net命令提示”,切换到Hello.il所在的目录,输入“ilasm Hello.il”,Enter。ilasm会提示你编译成功,输入“Hello”,Enter。就可以看到我们的程序的运行结果了。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752043/viewspace-993415/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10752043/viewspace-993415/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值