2015-03-19 38 views
1

我有一個關於CIL的問題。在CIL中,beq(Branch to target if equal)命令是什麼?在CIL中分支

我讀過有關它在這裏:List of CIL instructions

+0

你是說你完全瞭解所有其他指令*除了*'beq'?如果是這樣,那麼你覺得混亂/不符合其他說明呢?或者,我們是否期待着大量的問題,每一個問題都涉及單個指令? – 2015-03-19 07:49:13

+0

其餘的似乎很清楚,但我不明白分支的概念。 – BendEg 2015-03-19 07:53:37

+0

如果(a == b)轉到 – 2015-03-19 07:59:45

回答

1

beq target指令傳輸控制(「跳躍」)的目標,如果堆頂兩個值相等。這與ceq指令後跟brtrue target相同。鑑於方法:

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

它可以(但這只是一個examplatory碼)翻譯成:

.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 
}