CIL 中的分支

Branching in CIL

我有一个关于 CIL 的问题。 CIL 中的 beq(如果相等则分支到目标)命令是什么?

我在这里读到过:List of CIL instructions

如果堆栈顶部的两个值相等,beq target 指令将控制权 ("jumps") 转移到目标。这与 ceq 指令后跟 brtrue target 相同。给定方法:

static int BranchTest(int value1, int value2)
{
    if (value1 == value2)
    {
        return SomeMethod(0);
    }
    else
    {
        return SomeMethod(1);    
    }
}

可以(但这只是一个示例代码)翻译成:

.method private hidebysig static 
    int32 BranchTest (
        int32 value1,
        int32 value2
    ) cil managed 
{
    // ...

    IL_0000: ldarg.0      // load value1 on stack
    IL_0001: ldarg.1      // load value2 on stack
    IL_0002: beq IL_000b  // compare and jump conditionaly

    IL_0004: ldc.i4.1
    IL_0005: call int32 ConsoleLeak.Program::SomeMethod(int32)
    IL_000a: ret

    IL_000b: ldc.i4.0
    IL_000c: call int32 ConsoleLeak.Program::SomeMethod(int32)
    IL_0011: ret
}