user: 请从给定的汇编指令推导出C源代码:

```asm
<fill_argv>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x60,%rsp
  mov    %rdi,-0x48(%rbp)
  mov    %rsi,-0x50(%rbp)
  mov    %edx,-0x54(%rbp)
  movl   $0x0,-0x1c(%rbp)
  movl   $0x0,-0x14(%rbp)
  movl   $0x7d0,-0x10(%rbp)
  mov    -0x10(%rbp),%eax
  mov    %eax,%edi
  call   <malloc@plt>
  mov    %rax,-0x8(%rbp)
  mov    -0x10(%rbp),%eax
  mov    %eax,-0x14(%rbp)
  mov    -0x8(%rbp),%rax
  movb   $0x0,(%rax)
  movl   $0x0,-0x28(%rbp)
  movl   $0x1,-0x18(%rbp)
  movl   $0x0,-0x2c(%rbp)
  jmp    L308
L51:
  mov    -0x50(%rbp),%rax
  mov    %rax,%rdi
  call   <getc@plt>
  mov    %eax,-0xc(%rbp)
  mov    -0xc(%rbp),%eax
  mov    %al,-0x31(%rbp)
  mov    -0x2c(%rbp),%eax
  cmp    -0x14(%rbp),%eax
  jl     L416
  mov    -0x14(%rbp),%edx
  mov    -0x10(%rbp),%eax
  add    %eax,%edx
  mov    -0x8(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <realloc@plt>
  mov    %rax,-0x8(%rbp)
  mov    -0x10(%rbp),%eax
  add    %eax,-0x14(%rbp)
L416:
  mov    D19(%rip),%rax
  mov    (%rax),%eax
  cmp    %eax,-0xc(%rbp)
  jne    L169
  mov    -0x2c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
  movl   $0x1,-0x28(%rbp)
  movl   $0x1,-0x1c(%rbp)
  jmp    L120
L169:
  cmpb   $0xa,-0x31(%rbp)
  jne    L376
  cmpl   $0x0,-0x2c(%rbp)
  jle    L324
  mov    -0x2c(%rbp),%eax
  cltq
  lea    -0x1(%rax),%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x5c,%al
  jne    L324
  mov    -0x2c(%rbp),%eax
  cltq
  lea    -0x1(%rax),%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
  subl   $0x2,-0x2c(%rbp)
  jmp    L120
L324:
  cmpl   $0x1,-0x2c(%rbp)
  jle    L140
  mov    -0x2c(%rbp),%eax
  cltq
  lea    -0x1(%rax),%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0xd,%al
  jne    L140
  mov    -0x2c(%rbp),%eax
  cltq
  lea    -0x2(%rax),%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x5c,%al
  jne    L140
  mov    -0x2c(%rbp),%eax
  cltq
  lea    -0x2(%rax),%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
  subl   $0x3,-0x2c(%rbp)
  jmp    L120
L140:
  mov    -0x2c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
  movl   $0x1,-0x28(%rbp)
  jmp    L120
L376:
  cmpl   $0x0,-0x18(%rbp)
  je     L145
  cmpb   $0x20,-0x31(%rbp)
  je     L369
  cmpb   $0x9,-0x31(%rbp)
  jne    L417
L369:
  subl   $0x1,-0x2c(%rbp)
  jmp    L120
L417:
  movl   $0x0,-0x18(%rbp)
  mov    -0x2c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rax,%rdx
  movzbl -0x31(%rbp),%eax
  mov    %al,(%rdx)
  jmp    L120
L145:
  mov    -0x2c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rax,%rdx
  movzbl -0x31(%rbp),%eax
  mov    %al,(%rdx)
L120:
  addl   $0x1,-0x2c(%rbp)
L308:
  cmpl   $0x0,-0x28(%rbp)
  je     L51
  movl   $0x0,-0x30(%rbp)
  movl   $0x0,-0x24(%rbp)
L221:
  mov    -0x24(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L139
  mov    -0x24(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x30(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    -0x8(%rbp),%rdx
  add    %rcx,%rdx
  mov    %rdx,(%rax)
  mov    -0x30(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x30(%rbp)
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  movzbl (%rax),%eax
  cmp    $0x22,%al
  jne    L11
  mov    -0x24(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x20(%rbp)
  jmp    L23
L409:
  mov    -0x20(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x22,%al
  jne    L392
  addl   $0x1,-0x20(%rbp)
  mov    -0x20(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L257
  mov    -0x20(%rbp),%eax
  cmp    -0x14(%rbp),%eax
  jge    L83
  mov    -0x20(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
  jmp    L83
L392:
  mov    -0x20(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L260
  addl   $0x1,-0x20(%rbp)
L23:
  mov    -0x14(%rbp),%eax
  sub    $0x1,%eax
  cmp    %eax,-0x20(%rbp)
  jl     L409
  jmp    L137
L11:
  mov    -0x24(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x20(%rbp)
  jmp    L304
L329:
  mov    -0x20(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x20,%al
  je     L130
  mov    -0x20(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x9,%al
  jne    L336
L130:
  mov    -0x20(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
  jmp    L137
L336:
  mov    -0x20(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L443
  addl   $0x1,-0x20(%rbp)
L304:
  mov    -0x20(%rbp),%eax
  cmp    -0x14(%rbp),%eax
  jl     L329
  jmp    L137
L83:
  nop
L137:
  mov    -0x20(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x24(%rbp)
  mov    -0x24(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L245
  jmp    L221
L139:
  nop
  jmp    L76
L257:
  nop
  jmp    L76
L260:
  nop
  jmp    L76
L443:
  nop
  jmp    L76
L245:
  nop
L76:
  cmpl   $0x0,-0x30(%rbp)
  jne    L35
  cmpl   $0x0,-0x1c(%rbp)
  je     L35
  mov    D19(%rip),%rax
  mov    (%rax),%eax
  jmp    L30
L35:
  mov    -0x30(%rbp),%eax
L30:
  leave
  ret
```

assistant: ```c
int fill_argv(char **argv, FILE *describe_file, int max_args) {
  int argc, t, stop, s, e, eof = 0, start;
  int command_len = 0;
  char *command, c;
  int retC;
  int NNMAX_LINE = 2000;
  command = (char *)malloc(NNMAX_LINE);
  command_len = NNMAX_LINE;
  command[0] = '\0';
  stop = 0;
  start = 1;
  t = 0;
  while (stop == 0) {
    retC = getc(describe_file);
    c = (char)retC;
    if (t >= command_len) {
      command = (char *)realloc(command, command_len + NNMAX_LINE);
      command_len += NNMAX_LINE;
    }
    if (retC == EOF) {
      command[t] = '\0';
      stop = 1;
      eof = 1;
    } else if (c == '\n') {
      if (t > 0 && command[t - 1] == '\\') {
        command[t - 1] = '\0';
        t -= 2;
      } else if (t > 1 && command[t - 1] == '\r' && command[t - 2] == '\\') {
        command[t - 2] = '\0';
        t -= 3;
      } else {
        command[t] = '\0';
        stop = 1;
      }
    } else {
      if (start) {
        if (c == ' ' || c == '\t')
          t--;
        else {
          start = 0;
          command[t] = c;
        }
      } else {
        command[t] = c;
      }
    }
    t++;
  }
  argc = 0;
  s = 0;
  while (1) {
    if (command[s] == '\0') {
      goto finished;
    }
    argv[argc] = &command[s];
    if (argv[argc++][0] == '\"') {
      for (e = s + 1; e < command_len - 1; e++) {
        if (command[e] == '\"') {
          e++;
          if (command[e] == '\0')
            goto finished;
          if (e < command_len)
            command[e] = '\0';
          break;
        } else if (command[e] == '\0') {
          goto finished;
        }
      }
    } else {
      for (e = s + 1; e < command_len; e++) {
        if (command[e] == ' ' || command[e] == '\t') {
          command[e] = '\0';
          break;
        } else if (command[e] == '\0')
          goto finished;
      }
    }
    s = e + 1;
    if (command[s] == '\0')
      break;
  }
finished:
  if (argc == 0 && eof)
    return EOF;
  else
    return argc;
}
```