user: 这段汇编代码用C语言表示是什么样的:

```asm
<parse_args_from_file>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %rsi,-0x30(%rbp)
  mov    %rdx,-0x38(%rbp)
  mov    %rcx,-0x40(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0x30(%rbp),%rax
  movl   $0x0,(%rax)
  mov    -0x30(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x14(%rbp)
  movl   $0x0,-0x10(%rbp)
  movl   $0x0,-0x18(%rbp)
  lea    -0x18(%rbp),%rdx
  mov    -0x40(%rbp),%rcx
  mov    -0x28(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <parse_line_from_file@plt>
  mov    %eax,-0x14(%rbp)
  cmpl   $0x0,-0x14(%rbp)
  je     L163
  mov    -0x14(%rbp),%eax
  jmp    L122
L163:
  movl   $0x0,-0x14(%rbp)
  jmp    L109
L107:
  cmpl   $0x0,-0x14(%rbp)
  je     L63
  mov    -0x40(%rbp),%rax
  mov    (%rax),%rdx
  mov    -0x14(%rbp),%eax
  cltq
  sub    $0x1,%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x20,%al
  jne    L81
L63:
  mov    -0x40(%rbp),%rax
  mov    (%rax),%rdx
  mov    -0x14(%rbp),%eax
  cltq
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x20,%al
  je     L81
  mov    -0x30(%rbp),%rax
  mov    (%rax),%eax
  lea    0x1(%rax),%edx
  mov    -0x30(%rbp),%rax
  mov    %edx,(%rax)
L81:
  addl   $0x1,-0x14(%rbp)
L109:
  mov    -0x18(%rbp),%eax
  cmp    %eax,-0x14(%rbp)
  jl     L107
  mov    -0x30(%rbp),%rax
  mov    (%rax),%eax
  mov    $0x8,%esi
  mov    %eax,%edi
  call   <calloc@plt>
  mov    -0x38(%rbp),%rdx
  mov    %rax,(%rdx)
  mov    -0x38(%rbp),%rax
  mov    (%rax),%rax
  test   %rax,%rax
  jne    L59
  mov    -0x40(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    $0x4,%eax
  jmp    L122
L59:
  movl   $0x0,-0x14(%rbp)
  jmp    L90
L25:
  cmpl   $0x0,-0x14(%rbp)
  je     L21
  mov    -0x40(%rbp),%rax
  mov    (%rax),%rdx
  mov    -0x14(%rbp),%eax
  cltq
  sub    $0x1,%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L21
  mov    -0x40(%rbp),%rax
  mov    (%rax),%rdx
  mov    -0x14(%rbp),%eax
  cltq
  sub    $0x1,%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x20,%al
  jne    L79
L21:
  mov    -0x40(%rbp),%rax
  mov    (%rax),%rdx
  mov    -0x14(%rbp),%eax
  cltq
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x20,%al
  jne    L94
  mov    -0x30(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,-0x10(%rbp)
  jne    L79
L94:
  mov    -0x30(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,-0x10(%rbp)
  jge    L214
  mov    -0x40(%rbp),%rax
  mov    (%rax),%rsi
  mov    -0x14(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x38(%rbp),%rax
  mov    (%rax),%rdi
  mov    -0x10(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x10(%rbp)
  cltq
  shl    $0x3,%rax
  add    %rdi,%rax
  lea    (%rsi,%rcx,1),%rdx
  mov    %rdx,(%rax)
L214:
  cmpl   $0x0,-0x14(%rbp)
  jle    L79
  mov    -0x40(%rbp),%rax
  mov    (%rax),%rdx
  mov    -0x14(%rbp),%eax
  cltq
  sub    $0x1,%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
  mov    -0x14(%rbp),%eax
  sub    $0x2,%eax
  mov    %eax,-0xc(%rbp)
  jmp    L19
L7:
  mov    -0x40(%rbp),%rax
  mov    (%rax),%rdx
  mov    -0xc(%rbp),%eax
  cltq
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x20,%al
  jne    L148
  mov    -0x40(%rbp),%rax
  mov    (%rax),%rdx
  mov    -0xc(%rbp),%eax
  cltq
  add    %rdx,%rax
  movb   $0x0,(%rax)
  subl   $0x1,-0xc(%rbp)
L19:
  cmpl   $0x0,-0xc(%rbp)
  jg     L7
  jmp    L79
L148:
  nop
L79:
  addl   $0x1,-0x14(%rbp)
L90:
  mov    -0x18(%rbp),%eax
  cmp    %eax,-0x14(%rbp)
  jle    L25
  mov    $0x0,%eax
L122:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L102
  call   <__stack_chk_fail@plt>
L102:
  leave
  ret
```

assistant: ```c
int parse_args_from_file(char *path, int *argcp, char ***argvp, char **linep) {
  int i = *argcp = 0, k = 0, size = 0, l;
  if ((i = parse_line_from_file(path, linep, &size)) != 0)
    return i;
  for (i = 0; i < size; i++)
    if ((i == 0 || (*linep)[i - 1] == ' ') && (*linep)[i] != ' ')
      (*argcp)++;
  (*argvp) = calloc((*argcp), sizeof(char *));
  if ((*argvp) == NULL) {
    free((*linep));
    return 4;
  }
  for (i = 0; i <= size; i++) {
    if ((i == 0 || !(*linep)[i - 1] || (*linep)[i - 1] == ' ') && ((*linep)[i] != ' ' || k == *argcp)) {
      if (k < *argcp)
        (*argvp)[k++] = (*linep) + i;
      if (i > 0) {
        (*linep)[i - 1] = 0;
        for (l = i - 2; l > 0; l--) {
          if ((*linep)[l] != ' ')
            break;
          else
            (*linep)[l] = 0;
        }
      }
    }
  }
  return 0;
}
```