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

```asm
<white2null>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x18(%rbp)
  mov    %esi,-0x1c(%rbp)
  movl   $0x0,-0x4(%rbp)
  mov    -0x18(%rbp),%rax
  movb   $0x0,(%rax)
  movl   $0x1,-0xc(%rbp)
  movl   $0x0,-0x8(%rbp)
  jmp    L24
L108:
  mov    -0xc(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x22,%al
  jne    L37
  cmpl   $0x1,-0x4(%rbp)
  setne  %al
  movzbl %al,%eax
  mov    %eax,-0x4(%rbp)
L37:
  cmpl   $0x0,-0x4(%rbp)
  jne    L107
  mov    -0xc(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x20,%al
  je     L91
  mov    -0xc(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x9,%al
  je     L91
  mov    -0xc(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  jne    L61
L91:
  mov    -0xc(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
  jmp    L107
L61:
  mov    -0xc(%rbp),%eax
  cltq
  lea    -0x1(%rax),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L107
  addl   $0x1,-0x8(%rbp)
L107:
  addl   $0x1,-0xc(%rbp)
L24:
  mov    -0xc(%rbp),%eax
  cmp    -0x1c(%rbp),%eax
  jl     L108
  movl   $0x1,-0xc(%rbp)
  movl   $0x0,-0x4(%rbp)
  jmp    L113
L50:
  mov    -0xc(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x22,%al
  jne    L141
  cmpl   $0x1,-0x4(%rbp)
  setne  %al
  movzbl %al,%eax
  mov    %eax,-0x4(%rbp)
L141:
  cmpl   $0x0,-0x4(%rbp)
  je     L90
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x1(%rax),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x22,%al
  je     L111
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x1(%rax),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    -0xc(%rbp),%edx
  movslq %edx,%rcx
  mov    -0x18(%rbp),%rdx
  add    %rcx,%rdx
  movzbl (%rax),%eax
  mov    %al,(%rdx)
  jmp    L90
L111:
  mov    -0xc(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x1(%rax),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
  movl   $0x0,-0x4(%rbp)
L90:
  addl   $0x1,-0xc(%rbp)
L113:
  mov    -0xc(%rbp),%eax
  cmp    -0x1c(%rbp),%eax
  jl     L50
  mov    -0x1c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
  mov    -0x8(%rbp),%eax
  pop    %rbp
  ret
```

assistant: ```c
int white2null(char *str, int len) {
  int i;
  int count;
  int inquote = (0);
  str[0] = '\0';
  for (i = 1, count = 0; i < len; i++) {
    if (str[i] == '"')
      inquote = (inquote == (1)) ? (0) : (1);
    if (!inquote) {
      if (((str[i]) == ' ' || (str[i]) == '\t' || (str[i]) == '\n')) {
        str[i] = '\0';
      } else if (!str[i - 1]) {
        count++;
      }
    }
  }
  for (i = 1, inquote = (0); i < len; i++) {
    if (str[i] == '"')
      inquote = (inquote == (1)) ? (0) : (1);
    if (inquote) {
      if (str[i + 1] != '"') {
        str[i] = str[i + 1];
      } else {
        str[i] = '\0';
        str[i + 1] = '\0';
        inquote = (0);
      }
    }
  }
  str[len] = '\0';
  return count;
}
```