-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