user: 请将这段汇编代码片段转换成等效的C代码:

```asm
<main>:
  endbr64
  push   %r12
  mov    %edi,%r12d
  push   %rbp
  mov    %rsi,%rbp
  sub    $0x8,%rsp
  cmp    $0x1,%edi
  jle    L185
L104:
  mov    0x8(%rbp),%rdi
  call   <atoi@plt>
  cmp    $0x19,%eax
  ja     L60
  lea    D12(%rip),%rdx
  mov    %eax,%eax
  movslq (%rdx,%rax,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  mov    %rbp,%rsi
  mov    %r12d,%edi
  call   <exercise1@plt>
L60:
  add    $0x8,%rsp
  xor    %eax,%eax
  pop    %rbp
  pop    %r12
  ret
L185:
  mov    (%rsi),%rsi
  lea    D18(%rip),%rdi
  call   <printf@plt>
  or     $0xffffffff,%edi
  call   <exit@plt>
  jmp    L104
  xor    %edx,%edx
  mov    %rbp,%rsi
  mov    %r12d,%edi
  call   <exercise2425@plt>
  jmp    L60
  mov    $0x1,%edx
  mov    %rbp,%rsi
  mov    %r12d,%edi
  call   <exercise2425@plt>
  jmp    L60
  mov    %rbp,%rsi
  mov    %r12d,%edi
  call   <exercise23@plt>
  jmp    L60
  mov    %rbp,%rsi
  mov    %r12d,%edi
  call   <exercise22@plt>
  jmp    L60
  mov    %rbp,%rsi
  mov    %r12d,%edi
  call   <exercise21@plt>
  jmp    L60
  xor    %edx,%edx
  mov    %rbp,%rsi
  mov    %r12d,%edi
  call   <exercise1920@plt>
  jmp    L60
  mov    $0x1,%edx
  mov    %rbp,%rsi
  mov    %r12d,%edi
  call   <exercise1920@plt>
  jmp    L60
  mov    %rbp,%rsi
  mov    %r12d,%edi
  call   <exercise17@plt>
  jmp    L60
  xor    %edx,%edx
  mov    %rbp,%rsi
  mov    %r12d,%edi
  call   <exercise1516@plt>
  jmp    L60
  mov    $0x1,%edx
  mov    %rbp,%rsi
  mov    %r12d,%edi
  call   <exercise1516@plt>
  jmp    L60
  mov    %rbp,%rsi
  mov    %r12d,%edi
  call   <exercise14@plt>
  jmp    L60
  mov    %rbp,%rsi
  mov    %r12d,%edi
  call   <exercise13@plt>
  jmp    L60
  xor    %edx,%edx
  mov    %rbp,%rsi
  mov    %r12d,%edi
  call   <exercise1112@plt>
  jmp    L60
  mov    $0x1,%edx
  mov    %rbp,%rsi
  mov    %r12d,%edi
  call   <exercise1112@plt>
  jmp    L60
  xor    %edx,%edx
  mov    %rbp,%rsi
  mov    %r12d,%edi
  call   <exercise910@plt>
  jmp    L60
  mov    $0x1,%edx
  mov    %rbp,%rsi
  mov    %r12d,%edi
  call   <exercise910@plt>
  jmp    L60
  mov    %rbp,%rsi
  mov    %r12d,%edi
  call   <exercise8@plt>
  jmp    L60
  xor    %edx,%edx
  mov    %rbp,%rsi
  mov    %r12d,%edi
  call   <exercise67@plt>
  jmp    L60
  mov    $0x1,%edx
  mov    %rbp,%rsi
  mov    %r12d,%edi
  call   <exercise67@plt>
  jmp    L60
  xor    %edx,%edx
  mov    %rbp,%rsi
  mov    %r12d,%edi
  call   <exercise45@plt>
  jmp    L60
  mov    $0x1,%edx
  mov    %rbp,%rsi
  mov    %r12d,%edi
  call   <exercise45@plt>
  jmp    L60
  mov    %rbp,%rsi
  mov    %r12d,%edi
  call   <exercise3@plt>
  jmp    L60
  mov    %rbp,%rsi
  mov    %r12d,%edi
  call   <exercise2@plt>
  jmp    L60
```

tool_calls: name: parse_data
arguments: tag: D18
datatype: string

tool: D18: USAGE:
%s <exercise number> ...


assistant: ```c
int main(int argc, char *argv[]) {
  if (argc < 2) {
    printf("USAGE:\n%s <exercise number> ...\n", argv[0]);
    exit(-1);
  }
  switch (atoi(argv[1])) {
  case 1:
    exercise1(argc, argv);
    break;
  case 2:
    exercise2(argc, argv);
    break;
  case 3:
    exercise3(argc, argv);
    break;
  case 4:
    exercise45(argc, argv, 1);
    break;
  case 5:
    exercise45(argc, argv, 0);
    break;
  case 6:
    exercise67(argc, argv, 1);
    break;
  case 7:
    exercise67(argc, argv, 0);
    break;
  case 8:
    exercise8(argc, argv);
    break;
  case 9:
    exercise910(argc, argv, 1);
    break;
  case 10:
    exercise910(argc, argv, 0);
    break;
  case 11:
    exercise1112(argc, argv, 1);
    break;
  case 12:
    exercise1112(argc, argv, 0);
    break;
  case 13:
    exercise13(argc, argv);
    break;
  case 14:
    exercise14(argc, argv);
    break;
  case 15:
    exercise1516(argc, argv, 1);
    break;
  case 16:
    exercise1516(argc, argv, 0);
    break;
  case 17:
    exercise17(argc, argv);
    break;
  case 19:
    exercise1920(argc, argv, 1);
    break;
  case 20:
    exercise1920(argc, argv, 0);
    break;
  case 21:
    exercise21(argc, argv);
    break;
  case 22:
    exercise22(argc, argv);
    break;
  case 23:
    exercise23(argc, argv);
    break;
  case 24:
    exercise2425(argc, argv, 1);
    break;
  case 25:
    exercise2425(argc, argv, 0);
    break;
  }
  return 0;
}
```