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

```asm
<_DtHelpGetNxtToken>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  test   %rsi,%rsi
  je     L309
  mov    %rdi,%rbx
  mov    %rsi,%r12
  movq   $0x0,(%rsi)
  test   %rdi,%rdi
  je     L309
  movzbl (%rdi),%edi
  test   %dil,%dil
  je     L309
  cmp    $0xa,%dil
  je     L218
L217:
  movsbl %dil,%edi
  call   <isspace@plt>
  test   %rax,%rax
  je     L123
  add    $0x1,%rbx
  movzbl (%rbx),%edi
  test   %dil,%dil
  je     L123
  cmp    $0xa,%dil
  jne    L217
L123:
  movzbl (%rbx),%eax
  mov    %rbx,%r13
  test   %al,%al
  jne    L263
L104:
  mov    %r13,(%r12)
L132:
  mov    %rbx,%rax
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L309:
  mov    D11(%rip),%rax
  mov    (%rax),%edx
  mov    D28(%rip),%rax
  mov    %edx,(%rax)
  mov    $0x0,%ebx
  jmp    L132
L263:
  cmp    $0xa,%al
  je     L218
  mov    D38(%rip),%rdx
  mov    (%rdx),%esi
  cmp    $0x1,%esi
  jne    L272
  cmp    $0x22,%al
  je     L36
  mov    %rbx,0x8(%rsp)
  mov    $0x0,%r14d
  jmp    L189
L218:
  mov    %rbx,%r13
  lea    0x1(%rbx),%rbx
  jmp    L104
L272:
  mov    %rbx,%rdi
  call   <mblen@plt>
  mov    %rbx,0x8(%rsp)
  mov    $0x0,%r14d
  cmp    $0x1,%eax
  je     L114
L329:
  mov    0x8(%rsp),%rax
  cmpb   $0x0,(%rax)
  je     L264
L189:
  mov    0x8(%rsp),%rbx
  mov    D38(%rip),%r13
  jmp    L275
L114:
  cmpb   $0x22,(%rbx)
  jne    L329
L36:
  lea    0x1(%rbx),%rax
  mov    %rax,0x8(%rsp)
  mov    $0x1,%r14d
  jmp    L329
L198:
  mov    %rbx,%rdi
  call   <mblen@plt>
  mov    %eax,%ebp
  test   %eax,%eax
  js     L83
  cmp    $0x1,%eax
  je     L83
  cltq
  add    %rax,%rbx
  jmp    L66
L154:
  movsbl (%rbx),%edi
  call   <isspace@plt>
  test   %rax,%rax
  jne    L137
  cmpb   $0xa,(%rbx)
  je     L137
L252:
  add    $0x1,%rbx
  mov    $0x1,%ebp
L66:
  cmpb   $0x0,(%rbx)
  je     L72
L275:
  mov    0x0(%r13),%esi
  cmp    $0x1,%esi
  jne    L198
L83:
  test   %r14w,%r14w
  je     L154
  cmpb   $0x22,(%rbx)
  jne    L252
L137:
  mov    $0x1,%ebp
L72:
  mov    %rbx,%r15
  sub    0x8(%rsp),%r15
  lea    0x1(%r15),%edi
  call   <malloc@plt>
  mov    %rax,%r13
  test   %rax,%rax
  jne    L1
  mov    D28(%rip),%rax
  movl   $0xfffffff9,(%rax)
L196:
  test   %r14w,%r14w
  je     L104
  cmp    $0x1,%ebp
  jne    L104
  cmpb   $0x22,(%rbx)
  sete   %al
  movzbl %al,%eax
  add    %rax,%rbx
  jmp    L104
L264:
  mov    0x8(%rsp),%rbx
  mov    $0x1,%ebp
  jmp    L72
L1:
  mov    %r15d,%edx
  mov    0x8(%rsp),%rsi
  mov    %rax,%rdi
  call   <strncpy@plt>
  movb   $0x0,0x0(%r13,%r15,1)
  jmp    L196
```

assistant: ```c
char *_DtHelpGetNxtToken(char *str, char **retToken) {
  int len = 1;
  char *start;
  char *token;
  short quote = 0;
  short done = 0;
  if (retToken)
    *retToken = 0;
  if (str == 0 || *str == '\0' || retToken == 0) {
    errno = EINVAL;
    return 0;
  }
  while (*str && (*str != '\n') && isspace(*str))
    str++;
  if (*str == '\0')
    token = str;
  else if (*str == '\n') {
    token = str;
    str++;
  } else {
    if ((MB_CUR_MAX == 1 || mblen(str, MB_CUR_MAX) == 1) && *str == '\"') {
      quote = 1;
      str++;
    }
    start = str;
    while (*str && !done) {
      len = 1;
      if (MB_CUR_MAX != 1) {
        len = mblen(str, MB_CUR_MAX);
        if (len < 0)
          len = 1;
      }
      if (len == 1) {
        if ((quote && *str == '\"') || (!quote && (isspace(*str) || *str == '\n')))
          done = 1;
        else
          str++;
      } else
        str += len;
    }
    token = (char *)malloc((str - start + 1) * sizeof(char));
    if (token) {
      strncpy(token, start, str - start);
      *(token + (str - start)) = '\0';
    } else
      errno = -7;
    if (quote && len == 1 && *str == '\"')
      str++;
  }
  *retToken = token;
  return (str);
}
```