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

```asm
<cw_strtok>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x18(%rbp)
  cmpq   $0x0,-0x18(%rbp)
  jne    L52
  mov    D8(%rip),%rax
  test   %rax,%rax
  je     L204
  mov    D8(%rip),%rax
  mov    %rax,-0x18(%rbp)
  jmp    L52
L204:
  mov    $0x0,%eax
  jmp    L113
L52:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L210
  movq   $0x0,D8(%rip)
  mov    $0x0,%eax
  jmp    L113
L112:
  addq   $0x1,-0x18(%rbp)
L210:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L105
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x20,%al
  je     L112
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x9,%al
  je     L112
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  je     L112
L105:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L61
  movq   $0x0,D8(%rip)
  mov    $0x0,%eax
  jmp    L113
L61:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x22,%al
  jne    L1
  addq   $0x1,-0x18(%rbp)
  mov    -0x18(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  jmp    L21
L133:
  addq   $0x1,-0x18(%rbp)
L21:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x22,%al
  je     L41
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L41
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  je     L41
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xd,%al
  jne    L133
L41:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L239
  movq   $0x0,D8(%rip)
  jmp    L30
L239:
  mov    -0x18(%rbp),%rax
  movb   $0x0,(%rax)
  mov    -0x18(%rbp),%rax
  add    $0x1,%rax
  mov    %rax,D77(%rip)
  mov    D77(%rip),%rax
  movzbl (%rax),%eax
  cmp    $0x2c,%al
  jne    L30
  mov    D77(%rip),%rax
  add    $0x1,%rax
  mov    %rax,D77(%rip)
L30:
  mov    -0x8(%rbp),%rax
  jmp    L113
L1:
  mov    -0x18(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  jmp    L63
L272:
  addq   $0x1,-0x18(%rbp)
L63:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L260
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2c,%al
  je     L260
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  je     L260
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xd,%al
  jne    L272
L260:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L16
  movq   $0x0,D77(%rip)
  jmp    L7
L16:
  mov    -0x18(%rbp),%rax
  movb   $0x0,(%rax)
  mov    -0x18(%rbp),%rax
  add    $0x1,%rax
  mov    %rax,D77(%rip)
L7:
  mov    -0x8(%rbp),%rax
L113:
  pop    %rbp
  ret
```

assistant: ```c
char *cw_strtok(char *strToken) {
  static char *pNext;
  char *pStart;
  if (strToken == NULL) {
    if (pNext != NULL) {
      strToken = pNext;
    } else {
      return NULL;
    }
  }
  if (*strToken == 0) {
    pNext = NULL;
    return NULL;
  }
  while ((*strToken != 0) && ((*strToken == ' ') || (*strToken == '\t') || (*strToken == '\n'))) {
    ++strToken;
  }
  if (*strToken == 0) {
    pNext = NULL;
    return NULL;
  }
  if (*strToken == '\"') {
    ++strToken;
    pStart = strToken;
    while ((*strToken != '\"') && (*strToken != 0) && (*strToken != '\n') && (*strToken != '\r')) {
      ++strToken;
    }
    if (*strToken == 0) {
      pNext = NULL;
    } else {
      *strToken = 0;
      pNext = strToken + 1;
      if (*pNext == ',') {
        pNext++;
      }
    }
    return pStart;
  } else {
    pStart = strToken;
    while ((*strToken != 0) && (*strToken != ',') && (*strToken != '\n') && (*strToken != '\r')) {
      ++strToken;
    }
    if (*strToken == 0) {
      pNext = NULL;
    } else {
      *strToken = 0;
      pNext = strToken + 1;
    }
    return pStart;
  }
}
```