5

この x86 アセンブリ コードがあり、C に変換しようとしています。

.GLOBAL calculate
calculate:
    pushl %ebp
    movl %esp,%ebp
    movl 12(%ebp),%eax
    movl 8(%ebp),%ecx
    cmpl $2,%ecx
    ja done
    jmp *operations(,%ecx,4)
operation1:
    imull %eax,%eax
    jmp done
operation2:
    negl %eax
    jmp done
operation3:
    addl $0x80,%eax
done:
    leave
    ret
operations:
    .long operation1, operation2, operation3

jmp *operations(,%ecs,4)ラインについて質問です。これは switch ステートメントだと思います。メモリ内でどのように機能するかはわかっていますが、これを C に変換するにはどうすればよいでしょうか。スイッチを作成するために、それらの場所のスタックに何があるかを知る必要はありませんか?

これは私が持っているものです:

int calculate(int a, int b)
{
    if (2 > a)
    {
        return b;
    }
    switch(a) {
        case /* ? */:
            b = (b * b);
            break;
        case /* ? */:
            b = (b * -1);
            break;
        case /* ? */:
            b = (b + 128);
            break;
    }
    return b;
}
4

1 に答える 1