この 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;
}