user: 请显示与下面列出的汇编代码相匹配的C语言实现:

```asm
<parse_char_code_common>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %rsi,-0x30(%rbp)
  mov    %edx,%eax
  mov    %ecx,-0x38(%rbp)
  mov    %al,-0x34(%rbp)
  mov    -0x28(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x8(%rbp)
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,-0x10(%rbp)
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  mov    %al,-0x11(%rbp)
  movsbl -0x11(%rbp),%eax
  mov    %eax,%edi
  call   <isxdigit@plt>
  test   %rax,%rax
  je     L62
  addq   $0x1,-0x8(%rbp)
  mov    -0x10(%rbp),%eax
  mov    %eax,%edi
  call   <isxdigit@plt>
  test   %rax,%rax
  je     L168
  movsbl -0x11(%rbp),%edx
  mov    -0x10(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <two_char_as_hex@plt>
  mov    %eax,-0x10(%rbp)
  jmp    L121
L168:
  movl   $0xffffffff,-0x10(%rbp)
L121:
  cmpl   $0x0,-0x38(%rbp)
  jne    L62
  cmpl   $0x0,-0x10(%rbp)
  jne    L62
  movl   $0xffffffff,-0x10(%rbp)
L62:
  movl   $0x0,-0xc(%rbp)
  cmpq   $0x0,-0x30(%rbp)
  je     L150
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x7e,%al
  jne    L189
L150:
  cmpq   $0x0,-0x30(%rbp)
  je     L189
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x7e,%al
  jne    L189
  addq   $0x1,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x8(%rbp)
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,-0xc(%rbp)
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  mov    %al,-0x11(%rbp)
  movsbl -0x11(%rbp),%eax
  mov    %eax,%edi
  call   <isxdigit@plt>
  test   %rax,%rax
  je     L189
  addq   $0x1,-0x8(%rbp)
  mov    -0xc(%rbp),%eax
  mov    %eax,%edi
  call   <isxdigit@plt>
  test   %rax,%rax
  je     L164
  movsbl -0x11(%rbp),%edx
  mov    -0xc(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <two_char_as_hex@plt>
  mov    %eax,-0xc(%rbp)
  jmp    L66
L164:
  movl   $0xffffffff,-0xc(%rbp)
L66:
  cmpl   $0x0,-0x38(%rbp)
  jne    L189
  cmpl   $0x0,-0xc(%rbp)
  jne    L189
  movl   $0xffffffff,-0xc(%rbp)
L189:
  cmpb   $0x20,-0x34(%rbp)
  jne    L153
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L86
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isspace@plt>
  test   %eax,%eax
  jne    L86
  movl   $0x0,-0x10(%rbp)
  jmp    L68
L86:
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <skip_whitespace@plt>
  mov    %rax,-0x8(%rbp)
  jmp    L68
L153:
  cmpb   $0x0,-0x34(%rbp)
  je     L68
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    %al,-0x34(%rbp)
  je     L180
  movl   $0xffffffff,-0x10(%rbp)
  jmp    L68
L180:
  addq   $0x1,-0x8(%rbp)
L68:
  cmpl   $0x0,-0x10(%rbp)
  js     L242
  cmpl   $0x0,-0xc(%rbp)
  js     L242
  mov    -0x28(%rbp),%rax
  mov    -0x8(%rbp),%rdx
  mov    %rdx,(%rax)
L242:
  cmpq   $0x0,-0x30(%rbp)
  je     L136
  mov    -0x30(%rbp),%rax
  mov    -0xc(%rbp),%edx
  mov    %edx,(%rax)
L136:
  mov    -0x10(%rbp),%eax
  leave
  ret
```

assistant: ```c
int parse_char_code_common(char **_s, int *comp, char terminator, int zeroOk) {
  char *s = *_s;
  int cc, cc2;
  char follower;
  cc = *(s++);
  follower = *s;
  if (isxdigit(follower)) {
    s++;
    if (isxdigit(cc))
      cc = two_char_as_hex(cc, follower);
    else
      cc = -1;
    if ((!zeroOk) && (cc == 0))
      cc = -1;
  }
  cc2 = 0;
  if ((comp != NULL) && (*s != '~'))
    ;
  else if ((comp != NULL) && (*s == '~')) {
    s++;
    cc2 = *(s++);
    follower = *s;
    if (isxdigit(follower)) {
      s++;
      if (isxdigit(cc2))
        cc2 = two_char_as_hex(cc2, follower);
      else
        cc2 = -1;
      if ((!zeroOk) && (cc2 == 0))
        cc2 = -1;
    }
  }
  if (terminator == ' ') {
    if ((*s != 0) && (!isspace(*s)))
      cc = 0;
    else
      s = skip_whitespace(s);
  } else if (terminator != 0) {
    if (*s != terminator)
      cc = -1;
    else
      s++;
  }
  if ((cc >= 0) && (cc2 >= 0))
    *_s = s;
  if (comp != NULL)
    *comp = cc2;
  return cc;
}
```