WEB开发网
开发学院软件开发C语言 《C# to IL》第三章 选择和循环 阅读

《C# to IL》第三章 选择和循环

 2009-06-01 08:31:05 来源:WEB开发网   
核心提示:-3-在IL中,标号(label)是一个末尾带有冒号(即:)的名称,《C# to IL》第三章 选择和循环,它使我们能够从代码的一部分无条件地跳转到另一部分,我们经常在由反编译器生成的IL代码中看到这个标号,即br.s获取1字节,对于每个标记为.s的指令,例如:IL_0000: ldstr "hi"

-3-

在IL中,标号(label)是一个末尾带有冒号(即:)的名称。它使我们能够从代码的一部分无条件地跳转到另一部分。我们经常在由反编译器生成的IL代码中看到这个标号。例如:

IL_0000: ldstr      "hi"
IL_0005: call       void [mscorlib]System.Console::WriteLine(class System.String)
IL_000a: call       void zzz::abc()
IL_000f: ret

在冒号前面的词就是标号。在下面给出的程序中,我们在函数abc中创建一个名为a2的标号。指令br用于随时跳转到程序中的任何标号。

a.il

.assembly mukhi {}
.class private auto ansi zzz extends System.Object
{
.method public hidebysig static void vijay() il managed
{
.entrypoint
.locals (int32 V_0,class zzz V_1)
newobj instance void zzz::.ctor()
stloc.1
call int32 zzz::abc()
stloc.0
ldloc.0
call void [mscorlib]System.Console::WriteLine(int32)
ret
}
.method private hidebysig static int32 abc() il managed
{
.locals (int32 V_0)
ldc.i4.s   20
br.s a2
ldc.i4.s   30
a2: ret
}
}

Output

20

函数abc示范了这个概念。在这个函数中,代码绕过了指令ldc.i4.s 30。因此,返回值显示为20而不是30。从而,IL使用br指令来无条件地跳跃到代码的任何部分。(程序集指令br获取4字节,而在.sr之前的br,即br.s获取1字节,对于每个标记为.s的指令,解释都是相同的。)

1 2 3 4 5 6  下一页

Tags:to IL 第三章

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