Welcome

首页 / 软件开发 / C# / 《C# to IL》第三章 选择和循环

《C# to IL》第三章 选择和循环2011-09-22 博客园 包建强-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