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

```asm
<__lilx_compare>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %rdi,-0x8(%rbp)
  mov    %rsi,-0x10(%rbp)
  mov    %rdx,-0x18(%rbp)
  mov    -0x18(%rbp),%rax
  movl   $0x0,(%rax)
  jmp    L226
L122:
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  cmp    $0x73,%eax
  je     L132
  cmp    $0x73,%eax
  jg     L237
  cmp    $0x61,%eax
  je     L111
  cmp    $0x61,%eax
  jg     L237
  cmp    $0x53,%eax
  je     L47
  cmp    $0x53,%eax
  jg     L237
  cmp    $0x30,%eax
  je     L171
  cmp    $0x41,%eax
  jne    L237
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%esi
  lea    D1(%rip),%rax
  mov    %rax,%rdi
  call   <strchr@plt>
  test   %rax,%rax
  je     L111
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L204
L111:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isalnum@plt>
  test   %eax,%eax
  jne    L39
  mov    $0x1,%eax
  jmp    L268
L47:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isspace@plt>
  test   %eax,%eax
  jne    L219
  mov    $0x1,%eax
  jmp    L268
L132:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isspace@plt>
  test   %eax,%eax
  je     L124
  subq   $0x1,-0x10(%rbp)
  jmp    L25
L124:
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  lea    -0x1(%rax),%edx
  mov    -0x18(%rbp),%rax
  mov    %edx,(%rax)
  subq   $0x1,-0x8(%rbp)
  jmp    L25
L171:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L90
  mov    $0x1,%eax
  jmp    L268
L237:
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%edx
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    %al,%dl
  je     L258
  mov    $0x1,%eax
  jmp    L268
L204:
  nop
  jmp    L25
L39:
  nop
  jmp    L25
L219:
  nop
  jmp    L25
L90:
  nop
  jmp    L25
L258:
  nop
L25:
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  lea    0x1(%rax),%edx
  mov    -0x18(%rbp),%rax
  mov    %edx,(%rax)
  addq   $0x1,-0x8(%rbp)
  addq   $0x1,-0x10(%rbp)
L226:
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L122
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  lea    -0x1(%rax),%edx
  mov    -0x18(%rbp),%rax
  mov    %edx,(%rax)
  mov    $0x0,%eax
L268:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_tag: D1
data_type: string

tool: D1: !@#$%^&*()-_=+[{]}\/|;:,.?

assistant: ```c
uint8_t __lilx_compare(char *xml, char *transition, uint8_t *offset) {
  (*offset) = 0;
  while (*transition != '\0') {
    switch (*transition) {
    case 'A':
      if (strchr("!@#$%^&*()-_=+[{]}\\/|;:,.?", *xml) != NULL && *xml != '\0')
        break;
    case 'a':
      if (isalnum(*xml) == 0)
        return 1;
      break;
    case 'S':
      if (isspace(*xml) == 0)
        return 1;
      break;
    case 's':
      if (isspace(*xml) != 0)
        transition--;
      else {
        (*offset)--;
        xml--;
      }
      break;
    case '0':
      if (*xml != '\0')
        return 1;
      break;
    default:
      if (*transition != *xml)
        return 1;
      break;
    }
    (*offset)++;
    xml++;
    transition++;
  }
  (*offset)--;
  return 0;
}
```