user: 请将以下的汇编代码转换成C语言代码：

```asm
<args>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  mov    %edi,-0x14(%rbp)
  mov    %rsi,-0x20(%rbp)
  mov    %rdx,-0x28(%rbp)
  mov    %rcx,-0x30(%rbp)
  mov    %r8,-0x38(%rbp)
  mov    %r9,-0x40(%rbp)
  movl   $0x1,-0xc(%rbp)
  jmp    L168
L106:
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  lea    D204(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L233
  lea    D36(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L20
L233:
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  lea    D115(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L22
  lea    D40(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D27(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D5(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L20
L22:
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    $0x8,%edx
  lea    D74(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L68
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  lea    D196(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L244
  mov    -0x30(%rbp),%rax
  movl   $0x1,(%rax)
  jmp    L177
L244:
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  lea    D72(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L282
  mov    -0x30(%rbp),%rax
  movl   $0x2,(%rax)
  jmp    L177
L282:
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  lea    D195(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L204
  mov    -0x30(%rbp),%rax
  movl   $0x3,(%rax)
  jmp    L177
L204:
  lea    D73(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L177
L68:
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    $0x6,%edx
  lea    D43(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L278
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  lea    D142(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L217
  mov    -0x38(%rbp),%rax
  movb   $0xff,(%rax)
  jmp    L177
L217:
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  lea    D194(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L117
  mov    -0x38(%rbp),%rax
  movb   $0x0,(%rax)
  jmp    L177
L117:
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  lea    D88(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L187
  mov    -0x38(%rbp),%rax
  movb   $0x1,(%rax)
  jmp    L177
L187:
  lea    D107(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L177
L278:
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    $0x7,%edx
  lea    D137(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L9
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    $0x8,%edx
  lea    D45(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L202
  mov    -0x40(%rbp),%rax
  movl   $0x1,(%rax)
  jmp    L177
L202:
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    $0x8,%edx
  lea    D145(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L177
  mov    -0x40(%rbp),%rax
  movl   $0x0,(%rax)
  jmp    L177
L9:
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    $0xb,%edx
  lea    D3(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L90
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  sub    $0xa,%eax
  mov    %eax,%edi
  call   <malloc@plt>
  mov    %rax,-0x8(%rbp)
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  lea    0xb(%rax),%rdx
  mov    -0x8(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    0x10(%rbp),%rdx
  mov    %eax,(%rdx)
  jmp    L177
L90:
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    $0xb,%edx
  lea    D184(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L218
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  sub    $0xa,%eax
  mov    %eax,%edi
  call   <malloc@plt>
  mov    %rax,-0x8(%rbp)
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  lea    0xb(%rax),%rdx
  mov    -0x8(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    0x10(%rbp),%rdx
  mov    %eax,(%rdx)
  jmp    L177
L218:
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x28(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
L177:
  addl   $0x1,-0xc(%rbp)
L168:
  mov    -0xc(%rbp),%eax
  cmp    -0x14(%rbp),%eax
  jl     L106
  mov    $0x1,%eax
L20:
  leave
  ret
```

tool_calls: name: unpack_data
arguments: data_label: D204
datatype: string
name: unpack_data
arguments: data_label: D36
datatype: string
name: unpack_data
arguments: data_label: D115
datatype: string
name: unpack_data
arguments: data_label: D40
datatype: string
name: unpack_data
arguments: data_label: D27
datatype: string
name: unpack_data
arguments: data_label: D5
datatype: string
name: unpack_data
arguments: data_label: D74
datatype: string
name: unpack_data
arguments: data_label: D196
datatype: string
name: unpack_data
arguments: data_label: D72
datatype: string
name: unpack_data
arguments: data_label: D195
datatype: string
name: unpack_data
arguments: data_label: D73
datatype: string
name: unpack_data
arguments: data_label: D43
datatype: string
name: unpack_data
arguments: data_label: D142
datatype: string
name: unpack_data
arguments: data_label: D194
datatype: string
name: unpack_data
arguments: data_label: D88
datatype: string
name: unpack_data
arguments: data_label: D107
datatype: string
name: unpack_data
arguments: data_label: D137
datatype: string
name: unpack_data
arguments: data_label: D45
datatype: string
name: unpack_data
arguments: data_label: D145
datatype: string
name: unpack_data
arguments: data_label: D3
datatype: string
name: unpack_data
arguments: data_label: D184
datatype: string

tool: D204: --version

tool: D36: BestFriend brainfuck interpreter


tool: D115: --help

tool: D40: Usage: bestfriend [FILE]


tool: D27: Runs FILE as a brainfuck program.


tool: D5: If multiple FILEs are given, the last will be run.


tool: D74: --width=

tool: D196: --width=32

tool: D72: --width=16

tool: D195: --width=8

tool: D73: Invalid cell width, defaulting to 32-bit.


tool: D43: --eof=

tool: D142: --eof=-1

tool: D194: --eof=0

tool: D88: --eof=nochg

tool: D107: Invalid EOF behaviour, defaulting to -1.


tool: D137: --wrap=

tool: D45: --wrap=y

tool: D145: --wrap=n

tool: D3: --fwdbound=

tool: D184: --revbound=

assistant: ```c
bool args(int argc, char **argv, char *bfpath, int *cwidth, char *eofval, bool *wrap, int *max_fwdsize, int *max_revsize) {
  char *temp;
  for (int i = 1; i < argc; i++) {
    if (strcmp(argv[i], "--version") == 0) {
      printf("BestFriend brainfuck interpreter\n");
      return false;
    } else if (strcmp(argv[i], "--help") == 0) {
      printf("Usage: bestfriend [FILE]\n");
      printf("Runs FILE as a brainfuck program.\n");
      printf("If multiple FILEs are given, the last will be run.\n");
      return false;
    } else if (strncmp(argv[i], "--width=", 8) == 0) {
      if (strcmp(argv[i], "--width=32") == 0) {
        *cwidth = 1;
      } else if (strcmp(argv[i], "--width=16") == 0) {
        *cwidth = 2;
      } else if (strcmp(argv[i], "--width=8") == 0) {
        *cwidth = 3;
      } else {
        printf("Invalid cell width, defaulting to 32-bit.\n");
      }
    } else if (strncmp(argv[i], "--eof=", 6) == 0) {
      if (strcmp(argv[i], "--eof=-1") == 0) {
        *eofval = -1;
      } else if (strcmp(argv[i], "--eof=0") == 0) {
        *eofval = 0;
      } else if (strcmp(argv[i], "--eof=nochg") == 0) {
        *eofval = 1;
      } else {
        printf("Invalid EOF behaviour, defaulting to -1.\n");
      }
    } else if (strncmp(argv[i], "--wrap=", 7) == 0) {
      if (strncmp(argv[i], "--wrap=y", 8) == 0) {
        *wrap = true;
      } else if (strncmp(argv[i], "--wrap=n", 8) == 0) {
        *wrap = false;
      }
    } else if (strncmp(argv[i], "--fwdbound=", 11) == 0) {
      temp = malloc((strlen(argv[i]) - 10) * sizeof(char));
      strcpy(temp, argv[i] + 11);
      *max_fwdsize = atoi(temp);
    } else if (strncmp(argv[i], "--revbound=", 11) == 0) {
      temp = malloc((strlen(argv[i]) - 10) * sizeof(char));
      strcpy(temp, argv[i] + 11);
      *max_fwdsize = atoi(temp);
    } else {
      strcpy(bfpath, argv[i]);
    }
  }
  return true;
}
```