user: 请从给定的汇编指令推导出C源代码:

```asm
<main>:
  endbr64
  push   %rbp
  push   %rbx
  mov    %rsi,%rbx
  sub    $0x8,%rsp
  cmp    $0x3,%edi
  je     L108
  mov    $0x1,%edi
  call   <exit@plt>
L108:
  mov    0x10(%rbx),%rbp
  mov    0x8(%rbx),%rdi
  call   <output_title@plt>
  lea    D32(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L164
  lea    D14(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L99
L164:
  mov    %rbp,%rdi
  call   <do_normal@plt>
L233:
  add    $0x8,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  ret
L99:
  lea    D67(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L164
  lea    D118(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L164
  lea    D129(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L52
  lea    D103(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L52
  lea    D163(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L52
  lea    D20(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L148
  lea    D81(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L247
  lea    D57(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L135
  lea    D11(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L273
  lea    D8(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L230
  lea    D108(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L225
  lea    D28(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L87
  lea    D9(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L87
  lea    D149(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L92
  lea    D161(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L257
  mov    %rbp,%rdi
  call   <do_sjis@plt>
  jmp    L233
L52:
  mov    %rbp,%rdi
  call   <do_normal_only_charset2uni@plt>
  jmp    L233
L148:
  mov    %rbp,%rdi
  call   <do_cns11643_only_uni2charset@plt>
  jmp    L233
L247:
  mov    %rbp,%rdi
  call   <do_gbk1_only_charset2uni@plt>
  jmp    L233
L135:
  mov    %rbp,%rdi
  call   <do_gbk2_only_charset2uni@plt>
  jmp    L233
L273:
  mov    %rbp,%rdi
  call   <do_gbk1_only_uni2charset@plt>
  jmp    L233
L230:
  mov    %rbp,%rdi
  call   <do_gbk1@plt>
  jmp    L233
L87:
  mov    %rbp,%rdi
  call   <do_big5@plt>
  jmp    L233
L225:
  mov    %rbp,%rdi
  call   <do_ksc5601@plt>
  jmp    L233
L257:
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L233
L92:
  mov    %rbp,%rdi
  call   <do_johab_hangul@plt>
  jmp    L233
```

tool_calls: name: extract_symbolic_data
arguments: label: D32
type_infered: string
name: extract_symbolic_data
arguments: label: D14
type_infered: string
name: extract_symbolic_data
arguments: label: D67
type_infered: string
name: extract_symbolic_data
arguments: label: D118
type_infered: string
name: extract_symbolic_data
arguments: label: D129
type_infered: string
name: extract_symbolic_data
arguments: label: D103
type_infered: string
name: extract_symbolic_data
arguments: label: D163
type_infered: string
name: extract_symbolic_data
arguments: label: D20
type_infered: string
name: extract_symbolic_data
arguments: label: D81
type_infered: string
name: extract_symbolic_data
arguments: label: D57
type_infered: string
name: extract_symbolic_data
arguments: label: D11
type_infered: string
name: extract_symbolic_data
arguments: label: D8
type_infered: string
name: extract_symbolic_data
arguments: label: D108
type_infered: string
name: extract_symbolic_data
arguments: label: D28
type_infered: string
name: extract_symbolic_data
arguments: label: D9
type_infered: string
name: extract_symbolic_data
arguments: label: D149
type_infered: string
name: extract_symbolic_data
arguments: label: D161
type_infered: string

tool: D32: gb2312

tool: D14: gb12345ext

tool: D67: jisx0208

tool: D118: jisx0212

tool: D129: cns11643_1

tool: D103: cns11643_2

tool: D163: cns11643_3

tool: D20: cns11643_inv

tool: D81: gbkext1

tool: D57: gbkext2

tool: D11: gbkext_inv

tool: D8: cp936ext

tool: D108: ksc5601

tool: D28: big5

tool: D9: cp950ext

tool: D149: johab_hangul

tool: D161: cp932ext

assistant: ```c
int main(int argc, char *argv[]) {
  const char *charsetname;
  const char *name;
  if (argc != 3)
    exit(1);
  charsetname = argv[1];
  name = argv[2];
  output_title(charsetname);
  if (!strcmp(name, "gb2312") || !strcmp(name, "gb12345ext") || !strcmp(name, "jisx0208") || !strcmp(name, "jisx0212"))
    do_normal(name);
  else if (!strcmp(name, "cns11643_1") || !strcmp(name, "cns11643_2") || !strcmp(name, "cns11643_3"))
    do_normal_only_charset2uni(name);
  else if (!strcmp(name, "cns11643_inv"))
    do_cns11643_only_uni2charset(name);
  else if (!strcmp(name, "gbkext1"))
    do_gbk1_only_charset2uni(name);
  else if (!strcmp(name, "gbkext2"))
    do_gbk2_only_charset2uni(name);
  else if (!strcmp(name, "gbkext_inv"))
    do_gbk1_only_uni2charset(name);
  else if (!strcmp(name, "cp936ext"))
    do_gbk1(name);
  else if (!strcmp(name, "ksc5601"))
    do_ksc5601(name);
  else if (!strcmp(name, "big5") || !strcmp(name, "cp950ext"))
    do_big5(name);
  else if (!strcmp(name, "johab_hangul"))
    do_johab_hangul(name);
  else if (!strcmp(name, "cp932ext"))
    do_sjis(name);
  else
    exit(1);
  return 0;
}
```