user: 下面的汇编指令对应的C源代码是什么：

```asm
<main>:
  endbr64
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  sub    $0x8,%rsp
  mov    0x8(%rsi),%rdi
  mov    (%rsi),%r14
  test   %rdi,%rdi
  je     L52
  mov    %rsi,%rbp
  lea    D13(%rip),%rsi
  call   <fopen@plt>
  mov    %rax,%r13
  test   %rax,%rax
  je     L27
  mov    %rax,%rdi
  call   <parse_syscall_description@plt>
  mov    %r13,%rdi
  mov    %eax,%r12d
  call   <fclose@plt>
L13:
  test   %r12d,%r12d
  je     L22
L46:
  add    $0x8,%rsp
  mov    %r12d,%eax
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
L27:
  mov    0x8(%rbp),%rdi
  call   <perror@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L13
L22:
  lea    D18(%rip),%rsi
  lea    D87(%rip),%rdi
  call   <fopen@plt>
  mov    %rax,%rbp
  test   %rax,%rax
  je     L9
L8:
  mov    %r14,%rsi
  mov    %rbp,%rdi
  lea    D88(%rip),%r13
  call   <print_head@plt>
  mov    %rbp,%rdi
  lea    D110(%rip),%rsi
  lea    D248(%rip),%r14
  call   <fprintf@plt>
  mov    %rbp,%rdi
  lea    D119(%rip),%rsi
  call   <fprintf@plt>
  mov    %r13,%rsi
  mov    %rbp,%rdi
  call   <fprintf@plt>
  mov    %rbp,%rdi
  lea    D12(%rip),%rsi
  call   <fprintf@plt>
  mov    %rbp,%rdi
  lea    D64(%rip),%rsi
  call   <fprintf@plt>
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <fprintf@plt>
  mov    %r13,%rsi
  mov    %rbp,%rdi
  call   <fprintf@plt>
  mov    %rbp,%rdi
  lea    D56(%rip),%rsi
  call   <fprintf@plt>
  mov    %rbp,%rdi
  lea    D238(%rip),%rsi
  call   <fprintf@plt>
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <fprintf@plt>
  mov    %r13,%rsi
  mov    %rbp,%rdi
  call   <fprintf@plt>
  mov    %rbp,%rdi
  lea    D194(%rip),%rsi
  call   <fprintf@plt>
  mov    %rbp,%rdi
  lea    D112(%rip),%rsi
  call   <fprintf@plt>
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <fprintf@plt>
  mov    %rbp,%rdi
  lea    D169(%rip),%rsi
  call   <fprintf@plt>
  mov    %rbp,%rdi
  lea    D73(%rip),%rsi
  call   <fprintf@plt>
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <fprintf@plt>
  mov    %rbp,%rdi
  lea    D123(%rip),%rsi
  call   <fprintf@plt>
  mov    %rbp,%rdi
  lea    D207(%rip),%rsi
  call   <fprintf@plt>
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <fprintf@plt>
  mov    %r13,%rsi
  mov    %rbp,%rdi
  call   <fprintf@plt>
  mov    %rbp,%rdi
  lea    D152(%rip),%rsi
  call   <fprintf@plt>
  mov    %r13,%rsi
  mov    %rbp,%rdi
  call   <fprintf@plt>
  mov    %rbp,%rdi
  lea    D182(%rip),%rsi
  call   <fprintf@plt>
  mov    %r13,%rsi
  mov    %rbp,%rdi
  call   <fprintf@plt>
  xor    %eax,%eax
  call   <gemdos_table@plt>
  mov    $0x1,%edx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <generate_bindings_old@plt>
  mov    %rbp,%rdi
  lea    D91(%rip),%rsi
  call   <fprintf@plt>
  mov    %r13,%rsi
  mov    %rbp,%rdi
  call   <fprintf@plt>
  xor    %eax,%eax
  call   <bios_table@plt>
  mov    $0xd,%edx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <generate_bindings_old@plt>
  mov    %rbp,%rdi
  lea    D163(%rip),%rsi
  call   <fprintf@plt>
  mov    %r13,%rsi
  mov    %rbp,%rdi
  call   <fprintf@plt>
  xor    %eax,%eax
  call   <xbios_table@plt>
  mov    $0xe,%edx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <generate_bindings_old@plt>
  mov    %rbp,%rdi
  lea    D29(%rip),%rsi
  call   <fprintf@plt>
  mov    %r13,%rsi
  mov    %rbp,%rdi
  call   <fprintf@plt>
  lea    D51(%rip),%rsi
  mov    %rbp,%rdi
  call   <fprintf@plt>
  mov    %rbp,%rdi
  call   <fclose@plt>
  lea    D114(%rip),%rdi
  call   <generate_traps_h@plt>
  jmp    L46
L52:
  call   <parse_syscall_description@plt>
  mov    %eax,%r12d
  jmp    L13
L9:
  lea    D206(%rip),%rdi
  call   <perror@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L8
```

tool_calls: name: parse_data
arguments: label: D13
type: string
name: parse_data
arguments: label: D18
type: string
name: parse_data
arguments: label: D87
type: string
name: parse_data
arguments: label: D88
type: string
name: parse_data
arguments: label: D110
type: string
name: parse_data
arguments: label: D248
type: string
name: parse_data
arguments: label: D119
type: string
name: parse_data
arguments: label: D12
type: string
name: parse_data
arguments: label: D64
type: string
name: parse_data
arguments: label: D56
type: string
name: parse_data
arguments: label: D238
type: string
name: parse_data
arguments: label: D194
type: string
name: parse_data
arguments: label: D112
type: string
name: parse_data
arguments: label: D169
type: string
name: parse_data
arguments: label: D73
type: string
name: parse_data
arguments: label: D123
type: string
name: parse_data
arguments: label: D207
type: string
name: parse_data
arguments: label: D152
type: string
name: parse_data
arguments: label: D182
type: string
name: parse_data
arguments: label: D91
type: string
name: parse_data
arguments: label: D163
type: string
name: parse_data
arguments: label: D29
type: string
name: parse_data
arguments: label: D51
type: string
name: parse_data
arguments: label: D114
type: string
name: parse_data
arguments: label: D206
type: string

tool: D13: rt

tool: D18: w

tool: D87: ../include/mint/sysbind.h

tool: D88: 


tool: D110: #ifndef _MINT_SYSBIND_H


tool: D248: #endif


tool: D119: #define _MINT_SYSBIND_H


tool: D12: #ifndef _FEATURES_H


tool: D64: # include <features.h>


tool: D56: #ifndef _MINT_OSTRUCT_H


tool: D238: # include <mint/ostruct.h>


tool: D194: #ifndef _MINT_TRAP1_H


tool: D112: # include <mint/trap1.h>


tool: D169: #ifndef _MINT_TRAP13_H


tool: D73: # include <mint/trap13.h>


tool: D123: #ifndef _MINT_TRAP14_H


tool: D207: # include <mint/trap14.h>


tool: D152: __BEGIN_DECLS


tool: D182: /* GEMDOS */


tool: D91: /* BIOS */


tool: D163: /* XBIOS */


tool: D29: __END_DECLS


tool: D51: #endif /* _MINT_SYSBIND_H */


tool: D114: ../include/mint

tool: D206: sysbind.h

assistant: ```c
int main(int argc, char **argv) {
  const char *myname = *argv++;
  int error;
  if (*argv == NULL) {
    error = parse_syscall_description(NULL);
  } else {
    FILE *f;
    f = fopen(*argv, "rt");
    if (f) {
      error = parse_syscall_description(f);
      fclose(f);
    } else {
      perror(*argv);
      exit(1);
    }
  }
  if (!error) {
    FILE *f;
    f = fopen("../include/mint/sysbind.h", "w");
    if (!f) {
      perror("sysbind.h");
      exit(1);
    }
    print_head(f, myname);
    fprintf(f, "#ifndef _MINT_SYSBIND_H\n");
    fprintf(f, "#define _MINT_SYSBIND_H\n");
    fprintf(f, "\n");
    fprintf(f, "#ifndef _FEATURES_H\n");
    fprintf(f, "# include <features.h>\n");
    fprintf(f, "#endif\n");
    fprintf(f, "\n");
    fprintf(f, "#ifndef _MINT_OSTRUCT_H\n");
    fprintf(f, "# include <mint/ostruct.h>\n");
    fprintf(f, "#endif\n");
    fprintf(f, "\n");
    fprintf(f, "#ifndef _MINT_TRAP1_H\n");
    fprintf(f, "# include <mint/trap1.h>\n");
    fprintf(f, "#endif\n");
    fprintf(f, "#ifndef _MINT_TRAP13_H\n");
    fprintf(f, "# include <mint/trap13.h>\n");
    fprintf(f, "#endif\n");
    fprintf(f, "#ifndef _MINT_TRAP14_H\n");
    fprintf(f, "# include <mint/trap14.h>\n");
    fprintf(f, "#endif\n");
    fprintf(f, "\n");
    fprintf(f, "__BEGIN_DECLS\n");
    fprintf(f, "\n");
    fprintf(f, "/* GEMDOS */\n");
    fprintf(f, "\n");
    generate_bindings_old(f, gemdos_table(), 1);
    fprintf(f, "/* BIOS */\n");
    fprintf(f, "\n");
    generate_bindings_old(f, bios_table(), 13);
    fprintf(f, "/* XBIOS */\n");
    fprintf(f, "\n");
    generate_bindings_old(f, xbios_table(), 14);
    fprintf(f, "__END_DECLS\n");
    fprintf(f, "\n");
    fprintf(f, "#endif /* _MINT_SYSBIND_H */\n");
    fclose(f);
    generate_traps_h("../include/mint");
  }
  return error;
}
```