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

```asm
<token>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %r12
  push   %rbx
  mov    %rdi,-0x18(%rbp)
  mov    %rsi,-0x20(%rbp)
  mov    %edx,-0x24(%rbp)
  jmp    L153
L96:
  addq   $0x1,-0x18(%rbp)
L153:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x20,%al
  je     L96
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x9,%al
  je     L96
  mov    $0x0,%r12d
  jmp    L124
L119:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x7e,%al
  jne    L77
  addq   $0x1,-0x18(%rbp)
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L84
  mov    -0x18(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x18(%rbp)
  movzbl (%rax),%eax
  movsbl %al,%eax
  sub    $0x62,%eax
  cmp    $0x12,%eax
  ja     L115
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  lea    D8(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D8(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  mov    $0xd,%ebx
  jmp    L244
  mov    $0xd,%ebx
  jmp    L244
  mov    $0xa,%ebx
  jmp    L244
  mov    $0x9,%ebx
  jmp    L244
  mov    $0x8,%ebx
  jmp    L244
  mov    $0xc,%ebx
  jmp    L244
L115:
  mov    -0x18(%rbp),%rax
  movzbl -0x1(%rax),%ebx
L244:
  subl   $0x1,-0x24(%rbp)
  cmpl   $0x0,-0x24(%rbp)
  jle    L124
  mov    -0x20(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x20(%rbp)
  mov    %bl,(%rax)
  jmp    L124
L77:
  test   %r12d,%r12d
  je     L145
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x22,%al
  jne    L62
  jmp    L63
L145:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x20,%al
  je     L63
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x9,%al
  je     L63
L62:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x22,%al
  jne    L18
  mov    $0x1,%r12d
L18:
  mov    -0x18(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x18(%rbp)
  movzbl (%rax),%ebx
  subl   $0x1,-0x24(%rbp)
  cmpl   $0x0,-0x24(%rbp)
  jle    L124
  mov    -0x20(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x20(%rbp)
  mov    %bl,(%rax)
L124:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L119
  jmp    L63
L84:
  nop
L63:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L213
  addq   $0x1,-0x18(%rbp)
L213:
  mov    -0x20(%rbp),%rax
  movb   $0x0,(%rax)
  mov    -0x18(%rbp),%rax
  pop    %rbx
  pop    %r12
  pop    %rbp
  ret
```

assistant: ```c
char *token(char *src, char *tok, int size) {
  register int quotef;
  register char c;
  while (*src == ' ' || *src == '\t')
    ++src;
  quotef = 0;
  while (*src) {
    if (*src == '~') {
      ++src;
      if (*src == 0)
        break;
      switch (*src++) {
      case 'r':
        c = 13;
        break;
      case 'n':
        c = 13;
        break;
      case 'l':
        c = 10;
        break;
      case 't':
        c = 9;
        break;
      case 'b':
        c = 8;
        break;
      case 'f':
        c = 12;
        break;
      default:
        c = *(src - 1);
      }
      if (--size > 0) {
        *tok++ = c;
      }
    } else {
      if (quotef) {
        if (*src == '"')
          break;
      } else {
        if (*src == ' ' || *src == '\t')
          break;
      }
      if (*src == '"')
        quotef = 1;
      c = *src++;
      if (--size > 0)
        *tok++ = c;
    }
  }
  if (*src)
    ++src;
  *tok = 0;
  return (src);
}
```