首页
学习
活动
专区
圈层
工具
发布

CIL分支
EN

Stack Overflow用户
提问于 2015-03-19 07:39:48
回答 1查看 513关注 0票数 2

关于CIL我有个问题。在CIL中,beq (分支要瞄准,如果相等)命令是为了什么?

我在这里读到过:CIL指令列表

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-19 09:17:26

如果堆栈上的前两个值相等,beq target指令将控制(“跳转”)转移到目标。这与ceq指令和brtrue target指令相同。给定方法:

代码语言:javascript
复制
static int BranchTest(int value1, int value2)
{
    if (value1 == value2)
    {
        return SomeMethod(0);
    }
    else
    {
        return SomeMethod(1);    
    }
}

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

代码语言:javascript
复制
.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
} 
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29139295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档