WEB开发网
开发学院软件开发C语言 (翻译) 《C# to IL》第一章 IL入门 阅读

(翻译) 《C# to IL》第一章 IL入门

 2009-05-29 08:31:17 来源:WEB开发网   
核心提示: a.il.assemblymukhi{}.methodvoidvijay(){.entrypointcallvoidSystem.Console::WriteLine(classSystem.String)ret} 上面的代码有一处“闪光点”,当一个函数在IL中被调

a.il

.assembly mukhi {}
.method void vijay() 
{
      .entrypoint
      call void System.Console::WriteLine(class System.String)
      ret
}

上面的代码有一处“闪光点”。当一个函数在IL中被调用时,除了它的返回类型之外,被传递的参数的数据类型,也必须被指定。我们将Writeline设置为——希望得到一个System.String类型作为参数,但是由于没有字符串被传递到这个函数中,所以它会生成一个运行时错误。

因此,在调用一个函数时,在IL和其他程序语言之间有一个明显的区别。在IL中,当我们调用一个函数,我们必须指定关于该函数我们所知道的任何内容,包括它的返回类型和它的参数的数据类型。通过在运行期间进行恰当的检查,保证了汇编器能够在语法上验证代码的有效性。

现在我们将看到如何将参数传递到一个函数中。

a.il

.assembly mukhi {}
.method void vijay() 
{
      .entrypoint
      ldstr "hell"
      call void System.Console::WriteLine(class System.String)
      ret
}

Output

hell

汇编器指令ldstr把字符串放到栈上。Ldstr的名称是文本"load a string on the stack"的缩写版本。栈是一块内存区域,它用来传递参数到函数中。所有的函数从栈上接收它们的参数。因此,像ldstr这样的指令是必不可少的。

a.il

.assembly mukhi {}
.method public hidebysig static void vijay()il managed
{
      .entrypoint
      ldstr "hell"
      call void System.Console::WriteLine(class System.String)
      ret
}

上一页  1 2 3 4 5 6 7 8 9 10  下一页

Tags:翻译 to IL

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接