user: 提供的汇编代码用C语言表示会是什么样子:

```asm
<check_arg>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x8,%rsp
  cmp    $0x1,%edi
  jle    L56
  mov    %edi,%r13d
  mov    %rsi,%r14
  cmp    $0x2,%edi
  jle    L66
  mov    $0x2,%ebx
  lea    D67(%rip),%r15
  jmp    L293
L56:
  mov    $0x0,%eax
  call   <check_arg_error@plt>
  jmp    L66
L222:
  lea    D85(%rip),%rsi
  mov    (%r12),%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L200
  lea    0x1(%rbx),%eax
  cmp    %r13d,%eax
  jge    L200
  add    $0x2,%ebx
  cmp    %r13d,%ebx
  jge    L66
L293:
  movslq %ebx,%rbp
  shl    $0x3,%rbp
  lea    (%r14,%rbp,1),%r12
  mov    %r15,%rsi
  mov    (%r12),%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L222
  lea    0x1(%rbx),%eax
  cmp    %r13d,%eax
  jge    L222
  add    $0x2,%ebx
  cmp    %r13d,%ebx
  jl     L293
  jmp    L66
L200:
  lea    D43(%rip),%rsi
  mov    (%r12),%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L196
  lea    0x1(%rbx),%eax
  cmp    %r13d,%eax
  jge    L193
  add    $0x2,%ebx
  cmp    %r13d,%ebx
  jl     L293
  jmp    L66
L196:
  lea    D68(%rip),%rsi
  mov    (%r12),%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L245
  lea    0x1(%rbx),%eax
  cmp    %r13d,%eax
  jge    L310
  mov    0x8(%r14,%rbp,1),%rdi
  call   <check_arg_type@plt>
  test   %rax,%rax
  je     L195
  add    $0x2,%ebx
  cmp    %r13d,%ebx
  jl     L293
  jmp    L66
L195:
  mov    $0x0,%eax
  call   <check_arg_error@plt>
L106:
  cmp    %ebx,%r13d
  jg     L293
L66:
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L245:
  lea    D29(%rip),%rsi
  mov    (%r12),%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L38
  add    $0x1,%ebx
  cmp    %r13d,%ebx
  jl     L293
  jmp    L66
L38:
  lea    D77(%rip),%rsi
  mov    (%r12),%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L158
  add    $0x1,%ebx
  cmp    %r13d,%ebx
  jl     L293
  jmp    L66
L50:
  mov    $0x0,%eax
  call   <check_arg_error@plt>
  jmp    L106
L193:
  lea    D68(%rip),%rsi
  mov    (%r12),%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L245
L310:
  lea    D29(%rip),%rsi
  mov    (%r12),%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L66
  lea    D77(%rip),%rsi
  mov    (%r12),%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L66
L158:
  lea    D4(%rip),%rsi
  mov    (%r12),%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L50
  add    $0x1,%ebx
  cmp    %r13d,%ebx
  jl     L293
  jmp    L66
```

tool_calls: name: parse_data
arguments: label: D67
datatype: string
name: parse_data
arguments: label: D85
datatype: string
name: parse_data
arguments: label: D43
datatype: string
name: parse_data
arguments: label: D68
datatype: string
name: parse_data
arguments: label: D29
datatype: string
name: parse_data
arguments: label: D77
datatype: string
name: parse_data
arguments: label: D4
datatype: string

tool: D67: -name

tool: D85: -path

tool: D43: -user

tool: D68: -type

tool: D29: -nouser

tool: D77: -print

tool: D4: -ls

assistant: ```c
void check_arg(const int argc, const char *argv[]) {
  const char *const *parms = argv;
  int parm_pos = 2;
  if (argc < 2) {
    check_arg_error();
  }
  while (parm_pos < argc) {
    if ((strcmp(parms[parm_pos], "-name") == 0) && (parm_pos + 1 < argc)) {
      if (parm_pos + 2 < argc) {
        parm_pos += 2;
      } else {
        break;
      }
    } else if ((strcmp(parms[parm_pos], "-path") == 0) && (parm_pos + 1 < argc)) {
      if (parm_pos + 2 < argc) {
        parm_pos += 2;
      } else {
        break;
      }
    } else if ((strcmp(parms[parm_pos], "-user") == 0) && (parm_pos + 1 < argc)) {
      if (parm_pos + 2 < argc) {
        parm_pos += 2;
      } else {
        break;
      }
    } else if ((strcmp(parms[parm_pos], "-type") == 0) && (parm_pos + 1 < argc)) {
      if (check_arg_type(argv[parm_pos + 1])) {
        if (parm_pos + 2 < argc) {
          parm_pos += 2;
        } else {
          break;
        }
      } else {
        check_arg_error();
      }
    } else if ((strcmp(parms[parm_pos], "-nouser") == 0)) {
      if (parm_pos + 1 < argc) {
        parm_pos++;
      } else {
        break;
      }
    } else if ((strcmp(parms[parm_pos], "-print") == 0)) {
      if (parm_pos + 1 < argc) {
        parm_pos++;
      } else {
        break;
      }
    } else if ((strcmp(parms[parm_pos], "-ls") == 0)) {
      if (parm_pos + 1 < argc) {
        parm_pos++;
      } else {
        break;
      }
    } else
      check_arg_error();
  }
}
```