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

```asm
<tokenizeString>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x50,%rsp
  mov    %rdi,-0x38(%rbp)
  mov    %esi,-0x3c(%rbp)
  mov    %rdx,-0x48(%rbp)
  mov    -0x3c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x10(%rbp)
  mov    -0x38(%rbp),%rax
  mov    %rax,-0x20(%rbp)
  jmp    L47
L28:
  addq   $0x1,-0x20(%rbp)
L47:
  mov    -0x20(%rbp),%rax
  cmp    -0x10(%rbp),%rax
  jae    L53
  mov    -0x20(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L28
L53:
  subq   $0x1,-0x20(%rbp)
  jmp    L295
L132:
  subq   $0x1,-0x20(%rbp)
L295:
  mov    -0x20(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isspace@plt>
  test   %eax,%eax
  jne    L132
  mov    -0x20(%rbp),%rax
  add    $0x1,%rax
  mov    %rax,-0x10(%rbp)
  mov    -0x38(%rbp),%rax
  mov    %rax,-0x20(%rbp)
  jmp    L203
L78:
  addq   $0x1,-0x20(%rbp)
L203:
  mov    -0x20(%rbp),%rax
  cmp    -0x10(%rbp),%rax
  jae    L254
  mov    -0x20(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isspace@plt>
  test   %eax,%eax
  jne    L78
L254:
  mov    -0x20(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  cmp    -0x10(%rbp),%rax
  jne    L339
  mov    $0x8,%edi
  mov    $0x0,%eax
  call   <xmalloc@plt>
  cltq
  mov    %rax,%rdx
  mov    -0x48(%rbp),%rax
  mov    %rdx,(%rax)
  mov    -0x48(%rbp),%rax
  mov    (%rax),%rax
  movq   $0x0,(%rax)
  mov    $0x0,%eax
  jmp    L333
L339:
  mov    -0x10(%rbp),%rax
  sub    $0x1,%rax
  mov    %rax,-0x20(%rbp)
  movl   $0x0,-0x24(%rbp)
  jmp    L264
L275:
  mov    -0x20(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x27,%al
  je     L152
  mov    -0x20(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x22,%al
  jne    L323
L152:
  subq   $0x1,-0x20(%rbp)
  jmp    L276
L6:
  subq   $0x1,-0x20(%rbp)
L276:
  mov    -0x20(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x27,%al
  je     L323
  mov    -0x20(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x22,%al
  je     L323
  mov    -0x20(%rbp),%rax
  cmp    -0x8(%rbp),%rax
  ja     L6
L323:
  mov    -0x20(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isspace@plt>
  test   %eax,%eax
  je     L122
  mov    -0x20(%rbp),%rax
  sub    $0x1,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isspace@plt>
  test   %eax,%eax
  jne    L122
  addl   $0x1,-0x24(%rbp)
L122:
  subq   $0x1,-0x20(%rbp)
L264:
  mov    -0x20(%rbp),%rax
  cmp    -0x8(%rbp),%rax
  ja     L275
  addl   $0x1,-0x24(%rbp)
  mov    -0x24(%rbp),%eax
  add    $0x1,%eax
  cltq
  shl    $0x3,%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <xmalloc@plt>
  cltq
  mov    %rax,%rdx
  mov    -0x48(%rbp),%rax
  mov    %rdx,(%rax)
  mov    -0x48(%rbp),%rax
  mov    (%rax),%rdx
  mov    -0x24(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  movq   $0x0,(%rax)
  movl   $0x0,-0x24(%rbp)
  mov    -0x8(%rbp),%rax
  mov    %rax,-0x18(%rbp)
  mov    -0x18(%rbp),%rax
  mov    %rax,-0x20(%rbp)
  jmp    L282
L268:
  mov    -0x20(%rbp),%rax
  mov    %rax,-0x18(%rbp)
  jmp    L161
L87:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x27,%al
  je     L207
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x22,%al
  jne    L150
L207:
  addq   $0x1,-0x18(%rbp)
  jmp    L176
L109:
  addq   $0x1,-0x18(%rbp)
L176:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x27,%al
  je     L150
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x22,%al
  je     L150
  mov    -0x18(%rbp),%rax
  cmp    -0x10(%rbp),%rax
  jb     L109
L150:
  addq   $0x1,-0x18(%rbp)
L161:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isspace@plt>
  test   %eax,%eax
  jne    L281
  mov    -0x18(%rbp),%rax
  cmp    -0x10(%rbp),%rax
  jb     L87
L281:
  mov    -0x18(%rbp),%rax
  sub    -0x20(%rbp),%rax
  add    $0x1,%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <xmalloc@plt>
  movslq %eax,%rdx
  mov    -0x48(%rbp),%rax
  mov    (%rax),%rcx
  mov    -0x24(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rcx,%rax
  mov    %rdx,(%rax)
  mov    -0x18(%rbp),%rax
  sub    -0x20(%rbp),%rax
  mov    %rax,%rdx
  mov    -0x48(%rbp),%rax
  mov    (%rax),%rcx
  mov    -0x24(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rcx,%rax
  mov    (%rax),%rax
  mov    -0x20(%rbp),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncpy@plt>
  mov    -0x48(%rbp),%rax
  mov    (%rax),%rdx
  mov    -0x24(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x18(%rbp),%rax
  sub    -0x20(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
  addq   $0x1,-0x18(%rbp)
  jmp    L60
L111:
  addq   $0x1,-0x18(%rbp)
L60:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isspace@plt>
  test   %eax,%eax
  je     L8
  mov    -0x18(%rbp),%rax
  cmp    -0x10(%rbp),%rax
  jb     L111
L8:
  mov    -0x18(%rbp),%rax
  mov    %rax,-0x20(%rbp)
  addl   $0x1,-0x24(%rbp)
L282:
  mov    -0x20(%rbp),%rax
  cmp    -0x10(%rbp),%rax
  jae    L0
  mov    -0x18(%rbp),%rax
  cmp    -0x10(%rbp),%rax
  jb     L268
L0:
  mov    $0x0,%eax
L333:
  leave
  ret
```

assistant: ```c
int tokenizeString(char *string, int size, char ***output) {
  char *start, *end;
  char *p, *q;
  int i;
  end = string + size;
  for (p = string; p < end && *p != '\0'; p++)
    ;
  for (p--; isspace((int)*p); p--)
    ;
  end = p + 1;
  for (p = string; p < end && isspace((int)*p); p++)
    ;
  start = p;
  if (start == end) {
    *output = ((char **)xmalloc((1) * sizeof(char *)));
    (*output)[0] = '\0';
    return 0;
  }
  for (p = end - 1, i = 0; p > start; p--) {
    if (*p == '\'' || *p == '"') {
      for (p--; *p != '\'' && *p != '"' && p > start; p--)
        ;
    }
    if (isspace((int)*p) && !isspace((int)*(p - 1))) {
      i++;
    }
  }
  i++;
  *output = ((char **)xmalloc((i + 1) * sizeof(char *)));
  (*output)[i] = '\0';
  for (i = 0, p = q = start; p < end && q < end; p = q, i++) {
    for (q = p; !isspace((int)*q) && q < end; q++) {
      if (*q == '\'' || *q == '"') {
        for (q++; *q != '\'' && *q != '"' && q < end; q++)
          ;
      }
    }
    (*output)[i] = ((char *)xmalloc(((q - p + 1)) * sizeof(char)));
    strncpy((*output)[i], p, q - p);
    (*output)[i][q - p] = '\0';
    for (q++; isspace((int)*q) && q < end; q++)
      ;
  }
  return 0;
}
```