user: 提供的汇编代码用C语言表示会是什么样子:

```asm
<nseel_simple_tokenizer>:
  endbr64
  push   %r15
  push   %r14
  mov    %rdx,%r14
  push   %r13
  mov    %rdi,%r13
  push   %r12
  push   %rbp
  mov    %rcx,%rbp
  push   %rbx
  mov    %rsi,%rbx
  sub    $0x18,%rsp
  mov    (%rdi),%r12
  test   %rcx,%rcx
  je     L21
  mov    (%rcx),%ecx
  cmp    $0x1,%ecx
  je     L616
  cmp    $0x27,%ecx
  je     L638
  cmp    $0x22,%ecx
  je     L638
  cmp    %rsi,%r12
  jb     L507
  jmp    L199
  nopl   0x0(%rax)
L587:
  add    $0x1,%r12
  cmp    %r12,%rbx
  je     L199
L507:
  movsbl (%r12),%edi
  call   <isspace@plt>
  test   %rax,%rax
  jne    L587
L51:
  cmp    %rbx,%r12
  jae    L199
  movsbl (%r12),%edi
  cmp    $0x24,%dil
  je     L378
  test   %rbp,%rbp
  setne  0xf(%rsp)
  cmp    $0x2f,%dil
  movzbl 0xf(%rsp),%esi
  sete   %al
  and    %sil,%al
  jne    L247
L562:
  call   <isalnum@plt>
  lea    0x1(%r12),%r15
  movzbl (%r12),%ecx
  test   %rax,%rax
  jne    L151
  lea    -0x23(%rcx),%eax
  cmp    $0x1,%al
  jbe    L151
  cmp    $0x5f,%cl
  je     L151
  cmp    $0x27,%cl
  je     L224
  mov    $0x1,%eax
  cmp    $0x22,%cl
  jne    L621
L224:
  cmpb   $0x0,0xf(%rsp)
  je     L475
  movsbl %cl,%eax
  mov    %eax,0x0(%rbp)
L475:
  mov    $0x1,%eax
  cmp    %r15,%rbx
  jbe    L621
  mov    %r12,%rsi
  mov    %r15,%r12
  jmp    L279
  nopl   0x0(%rax,%rax,1)
L638:
  mov    %r12,%rsi
  cmp    %rbx,%r12
  jb     L279
  jmp    L98
  nopl   (%rax)
L526:
  cmp    %r12,%rbx
  jbe    L94
L279:
  lea    0x1(%r12),%r15
  movzbl (%r12),%eax
  cmp    %r15,%rbx
  jbe    L333
  add    $0x2,%r12
  cmp    $0x5c,%al
  je     L526
L333:
  cmp    %cl,%al
  je     L623
  mov    %r15,%r12
  cmp    %r12,%rbx
  ja     L279
L94:
  mov    %r12d,%eax
  mov    %r12,%r15
  mov    %rsi,%r12
  sub    %esi,%eax
  jmp    L621
  nopl   0x0(%rax)
L151:
  cmp    $0x24,%cl
  je     L310
L346:
  mov    %r12,%r15
L600:
  add    $0x1,%r15
  cmp    %r15,%rbx
  jbe    L87
  nopl   (%rax)
L431:
  movsbl (%r15),%edi
  call   <isalnum@plt>
  test   %rax,%rax
  jne    L108
  movzbl (%r15),%eax
  cmp    $0x2e,%al
  je     L108
  cmp    $0x5f,%al
  jne    L87
L108:
  add    $0x1,%r15
  cmp    %r15,%rbx
  jne    L431
L87:
  mov    %r15d,%eax
  sub    %r12d,%eax
L621:
  xor    %ecx,%ecx
  cmp    %r12,%r15
  cmovbe %rcx,%r12
L62:
  mov    %r15,0x0(%r13)
  mov    %eax,(%r14)
  add    $0x18,%rsp
  mov    %r12,%rax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax,%rax,1)
L199:
  mov    %rbx,%r15
  xor    %eax,%eax
  xor    %r12d,%r12d
  jmp    L62
  nopw   0x0(%rax,%rax,1)
L247:
  lea    -0x1(%rbx),%rdx
  cmp    %rdx,%r12
  jae    L595
  movzbl 0x1(%r12),%edx
  cmp    $0x2f,%dl
  je     L518
  mov    %al,0xf(%rsp)
  cmp    $0x2a,%dl
  jne    L562
  cmp    $0x2f,%dl
  je     L518
  lea    0x2(%r12),%r15
  movl   $0x1,0x0(%rbp)
  cmp    %r15,%rbx
  jbe    L613
  mov    %r12,%rcx
  mov    %r15,%r12
  jmp    L484
  nopw   0x0(%rax,%rax,1)
L21:
  mov    %r12,%rdi
  call   <nseel_skip_space_and_comments@plt>
  mov    %rax,%r12
  jmp    L51
L616:
  mov    %r12,%rcx
  cmp    %rsi,%r12
  jae    L98
  nopl   0x0(%rax)
L484:
  mov    %r12,%rdx
  add    $0x1,%r12
  cmpb   $0x2a,-0x1(%r12)
  jne    L205
  cmp    %r12,%rbx
  jbe    L205
  cmpb   $0x2f,(%r12)
  jne    L484
  lea    0x2(%rdx),%r15
  movl   $0x0,0x0(%rbp)
  mov    %rcx,%r12
  mov    %r15d,%eax
  sub    %ecx,%eax
  jmp    L621
  nopl   0x0(%rax,%rax,1)
L205:
  cmp    %r12,%rbx
  jne    L484
  mov    %r12d,%eax
  mov    %r12,%r15
  mov    %rcx,%r12
  sub    %ecx,%eax
  jmp    L621
  nopl   (%rax)
L378:
  lea    0x3(%r12),%rax
  cmp    %rax,%rbx
  jbe    L554
  cmpb   $0x27,0x1(%r12)
  je     L358
L554:
  test   %rbp,%rbp
  setne  0xf(%rsp)
  jmp    L562
  nop
L310:
  lea    -0x1(%rbx),%rax
  cmp    %rax,%r12
  jae    L346
  cmpb   $0x7e,0x1(%r12)
  cmovne %r12,%r15
  jmp    L600
  nopl   0x0(%rax)
L623:
  mov    %r15d,%eax
  mov    %rsi,%r12
  sub    %esi,%eax
  test   %rbp,%rbp
  je     L621
  movl   $0x0,0x0(%rbp)
  jmp    L621
  nopl   (%rax)
L595:
  mov    %al,0xf(%rsp)
  jmp    L562
L358:
  cmpb   $0x27,0x3(%r12)
  lea    0x4(%r12),%r15
  mov    $0x4,%eax
  jne    L554
  jmp    L621
L98:
  mov    %r12,%r15
  xor    %eax,%eax
  xor    %r12d,%r12d
  jmp    L62
L518:
  mov    %r12,%r15
  jmp    L292
  nopw   0x0(%rax,%rax,1)
L327:
  cmp    $0xa,%al
  je     L87
L292:
  add    $0x1,%r15
  cmp    %r15,%rbx
  je     L87
  movzbl (%r15),%eax
  cmp    $0xd,%al
  jne    L327
  jmp    L87
L613:
  mov    $0x2,%eax
  jmp    L621
```

assistant: ```c
const char *nseel_simple_tokenizer(const char **ptr, const char *endptr, int32_t *lenOut, int32_t *state) {
  const char *p = *ptr;
  const char *rv = p;
  char delim;
  if (state) {
    if (*state == 1)
      goto in_comment;
    if (*state == '\'' || *state == '\"') {
      delim = (char)*state;
      goto in_string;
    }
    while (p < endptr && isspace(p[0]))
      p++;
  } else {
    p = nseel_skip_space_and_comments(p, endptr);
  }
  if (p >= endptr) {
    *ptr = endptr;
    *lenOut = 0;
    return NULL;
  }
  rv = p;
  if (*p == '$' && p + 3 < endptr && p[1] == '\'' && p[3] == '\'') {
    p += 4;
  } else if (state && *p == '/' && p < endptr - 1 && (p[1] == '/' || p[1] == '*')) {
    if (p[1] == '/') {
      while (p < endptr && *p != '\r' && *p != '\n')
        p++;
    } else {
      if (state)
        *state = 1;
      p += 2;
    in_comment:
      while (p < endptr) {
        const char c = *p++;
        if (c == '*' && p < endptr && *p == '/') {
          p++;
          if (state)
            *state = 0;
          break;
        }
      }
    }
  } else if (isalnum(*p) || *p == '_' || *p == '#' || *p == '$') {
    if (*p == '$' && p < endptr - 1 && p[1] == '~')
      p++;
    p++;
    while (p < endptr && (isalnum(*p) || *p == '_' || *p == '.'))
      p++;
  } else if (*p == '\'' || *p == '\"') {
    delim = *p++;
    if (state)
      *state = delim;
  in_string:
    while (p < endptr) {
      const char c = *p++;
      if (p < endptr && c == '\\')
        p++;
      else if (c == delim) {
        if (state)
          *state = 0;
        break;
      }
    }
  } else {
    p++;
  }
  *ptr = p;
  *lenOut = (int32_t)(p - rv);
  return p > rv ? rv : NULL;
}
```