我有一个关于CIL的问题。CIL中的beq
(如果相等,则分支到目标)命令用于什么?
我在这里读到了:CIL指令列表
如果堆栈上的前两个值相等,beq target
指令将控制("跳转")转移到目标。这与后面跟着CCD_ 4的ceq
指令相同。给定方法:
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
}