我试图找到此功能的汇编指令的等效c代码。
装配说明:
0x400698: 0x00000000004005ad 0x00000000004005c3
0x4006a8: 0x00000000004005c3 0x00000000004005c3
0x4006b8: 0x00000000004005a8 0x00000000004005be
0x4006c8: 0x00000000004005a8 0x00000000004005b7
0x000000000040057c <+0>: push %rbp
0x000000000040057d <+1>: mov %rsp,%rbp
0x0000000000400580 <+4>: mov %rdi,-0x18(%rbp)
0x0000000000400584 <+8>: mov %rsi,-0x20(%rbp)
0x0000000000400588 <+12>: mov -0x20(%rbp),%rax
0x000000000040058c <+16>: mov %rax,-0x8(%rbp)
0x0000000000400590 <+20>: mov -0x18(%rbp),%rax
0x0000000000400594 <+24>: sub $0x52,%rax
0x0000000000400598 <+28>: cmp $0x7,%rax
0x000000000040059c <+32>: ja 0x4005c3 <switch_prob+71>
0x000000000040059e <+34>: mov 0x400698(,%rax,8),%rax
0x00000000004005a6 <+42>: jmpq *%rax
0x00000000004005a8 <+44>: subq $0xa,-0x8(%rbp)
0x00000000004005ad <+49>: movq $0x3e,-0x8(%rbp)
0x00000000004005b5 <+57>: jmp 0x4005cb <switch_prob+79>
0x00000000004005b7 <+59>: sarq $0x4,-0x8(%rbp)
0x00000000004005bc <+64>: jmp 0x4005cb <switch_prob+79>
0x00000000004005be <+66>: subq $0x1,-0x8(%rbp)
0x00000000004005c3 <+71>: movq $0x3b,-0x8(%rbp)
0x00000000004005cb <+79>: mov -0x8(%rbp),%rax
0x00000000004005cf <+83>: pop %rbp
0x00000000004005d0 <+84>: retq
我试图在switch语句中恢复案例。我是汇编转换语句的新手。 到目前为止我的代码(猜测最多):
long switch_prob(long x, long n){
long result = n;
switch(x){
case 82:
break;
case 7:
break;
case 89:
break;
case 59:
break;
case 87:
default:
break;
}
return result;
}
答案 0 :(得分:1)
在$ 82之后,它检查结果是否大于7.如果是,则转到默认情况。否则它会跳过跳转表,因此案例是82 - 89.其中一些案例具有相同的代码,有些案例也属于以下情况。