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

```asm
<string_split_quotes>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  mov    %rdx,%r13
  push   %r12
  mov    %rsi,%r12
  push   %rbp
  push   %rbx
  mov    %rdi,%rbx
  sub    $0x8,%rsp
  movl   $0x0,(%rsi)
  call   <strlen@plt>
  lea    0x8(,%rax,8),%edi
  call   <malloc@plt>
  mov    %rax,0x0(%r13)
  test   %rax,%rax
  je     L135
  movsbl (%rbx),%edi
  test   %dil,%dil
  je     L66
  nopl   0x0(%rax,%rax,1)
L181:
  mov    %rbx,%rbp
  jmp    L198
  nopl   (%rax)
L33:
  movsbl 0x1(%rbp),%edi
  add    $0x1,%rbp
L198:
  call   <isspace@plt>
  test   %rax,%rax
  jne    L33
  movslq (%r12),%rdx
  mov    0x0(%r13),%rax
  cmpb   $0x0,0x0(%rbp)
  mov    %rdx,%rcx
  lea    (%rax,%rdx,8),%rsi
  je     L122
  add    $0x1,%ecx
  mov    %ecx,(%r12)
  mov    %rbp,(%rsi)
  movsbl 0x0(%rbp),%edi
  test   %dil,%dil
  jne    L251
  jmp    L10
  nopl   0x0(%rax,%rax,1)
L1:
  call   <isspace@plt>
  test   %rax,%rax
  jne    L171
  movzbl 0x0(%rbp),%r14d
  cmp    $0x27,%r14b
  je     L203
  cmp    $0x22,%r14b
  je     L203
  test   %r14b,%r14b
  je     L175
  add    $0x1,%rbp
L101:
  movsbl 0x0(%rbp),%edi
  test   %dil,%dil
  je     L175
L251:
  cmp    $0x5c,%dil
  jne    L1
  mov    %rbp,%rdi
  lea    0x1(%rbp),%rbx
  call   <strlen@plt>
  mov    %rbx,%rsi
  mov    %rbp,%rdi
  mov    %eax,%edx
  call   <memmove@plt>
  cmpb   $0x0,0x0(%rbp)
  je     L175
  mov    %rbx,%rbp
  jmp    L101
  nopl   0x0(%rax,%rax,1)
L203:
  mov    %rbp,%rdi
  lea    0x1(%rbp),%rbx
  call   <strlen@plt>
  mov    %rbx,%rsi
  mov    %rbp,%rdi
  mov    %eax,%edx
  call   <memmove@plt>
  movzbl 0x0(%rbp),%eax
  test   %al,%al
  jne    L5
  jmp    L175
  nopl   0x0(%rax,%rax,1)
L228:
  cmp    %al,%r14b
  je     L43
L147:
  movzbl (%rbx),%eax
  test   %al,%al
  je     L175
  add    $0x1,%rbx
L5:
  mov    %rbp,%r15
  mov    %rbx,%rbp
  cmp    $0x5c,%al
  jne    L228
  mov    %r15,%rdi
  call   <strlen@plt>
  mov    %rbx,%rsi
  mov    %r15,%rdi
  mov    %eax,%edx
  call   <memmove@plt>
  cmpb   $0x0,-0x1(%rbx)
  jne    L147
L175:
  mov    0x0(%r13),%rax
  movslq (%r12),%rdx
L122:
  movq   $0x0,(%rax,%rdx,8)
  add    $0x8,%rsp
  mov    $0x1,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L171:
  movsbl 0x1(%rbp),%edi
  movb   $0x0,0x0(%rbp)
  lea    0x1(%rbp),%rbx
  test   %dil,%dil
  jne    L181
  jmp    L175
  nopw   0x0(%rax,%rax,1)
L43:
  mov    %r15,%rdi
  mov    %r15,%rbp
  call   <strlen@plt>
  mov    %rbx,%rsi
  mov    %r15,%rdi
  mov    %eax,%edx
  call   <memmove@plt>
  jmp    L101
L10:
  movslq %ecx,%rdx
  jmp    L122
L135:
  add    $0x8,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L66:
  movslq (%r12),%rdx
  jmp    L122
```

assistant: ```c
int string_split_quotes(char *str, int *argc, char ***argv) {
  *argc = 0;
  *argv = malloc((strlen(str) + 1) * sizeof(char *));
  if (!*argv)
    return 0;
  while (*str) {
    while (isspace((int)*str)) {
      str++;
    }
    if (!*str)
      break;
    (*argv)[(*argc)++] = str;
    while (*str) {
      if (*str == '\\') {
        memmove(str, str + 1, strlen(str));
        if (*str)
          str++;
      } else if (isspace((int)*str)) {
        *str = 0;
        str++;
        break;
      } else if (*str == '\'' || *str == '\"') {
        char quote = *str;
        memmove(str, str + 1, strlen(str));
        while (*str) {
          if (*str == '\\') {
            memmove(str, str + 1, strlen(str));
            if (*str)
              str++;
          } else if (*str == quote) {
            memmove(str, str + 1, strlen(str));
            break;
          } else {
            str++;
          }
        }
      } else if (!*str) {
        break;
      } else {
        str++;
      }
    }
  }
  (*argv)[*argc] = 0;
  return 1;
}
```