user: 下面的汇编指令对应的C源代码是什么:

```asm
<BGBDTC_SigNext>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    -0x18(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x60,%al
  jle    L112
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x7a,%al
  jg     L112
  mov    -0x8(%rbp),%rax
  add    $0x1,%rax
  jmp    L19
L112:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x43,%al
  je     L136
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x44,%al
  je     L136
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x52,%al
  jne    L251
L136:
  mov    -0x8(%rbp),%rax
  add    $0x1,%rax
  mov    %rax,%rdi
  call   <BGBDTC_SigNext>
  jmp    L19
L251:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x50,%al
  jne    L341
  jmp    L343
L65:
  addq   $0x1,-0x8(%rbp)
L343:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x50,%al
  je     L65
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <BGBDTC_SigNext>
  jmp    L19
L341:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x51,%al
  jne    L95
  jmp    L210
L38:
  addq   $0x1,-0x8(%rbp)
L210:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x51,%al
  je     L38
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <BGBDTC_SigNext>
  jmp    L19
L95:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x58,%al
  je     L158
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x4c,%al
  je     L158
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x55,%al
  jne    L33
L158:
  addq   $0x1,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2f,%al
  jle    L173
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x39,%al
  jg     L173
  jmp    L175
L51:
  addq   $0x1,-0x8(%rbp)
L175:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2f,%al
  jle    L227
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x39,%al
  jle    L51
  jmp    L227
L270:
  addq   $0x1,-0x8(%rbp)
L173:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L90
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x3b,%al
  jne    L270
L90:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x3b,%al
  jne    L87
  addq   $0x1,-0x8(%rbp)
  jmp    L87
L227:
  nop
L87:
  mov    -0x8(%rbp),%rax
  jmp    L19
L33:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x41,%al
  jne    L12
  addq   $0x1,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2f,%al
  jle    L180
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x39,%al
  jg     L180
  jmp    L123
L118:
  addq   $0x1,-0x8(%rbp)
L123:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2f,%al
  jle    L165
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x39,%al
  jle    L118
L165:
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <BGBDTC_SigNext>
  jmp    L19
L180:
  mov    -0x8(%rbp),%rax
  add    $0x1,%rax
  mov    %rax,%rdi
  call   <BGBDTC_SigNext>
  jmp    L19
L12:
  mov    -0x8(%rbp),%rax
L19:
  leave
  ret
```

assistant: ```c
char *BGBDTC_SigNext(char *sig) {
  char *s;
  s = sig;
  if ((*s >= 'a') && (*s <= 'z'))
    return (s + 1);
  if ((*s == 'C') || (*s == 'D') || (*s == 'R')) {
    return (BGBDTC_SigNext(s + 1));
  }
  if (*s == 'P') {
    while (*s == 'P')
      s++;
    return (BGBDTC_SigNext(s));
  }
  if (*s == 'Q') {
    while (*s == 'Q')
      s++;
    return (BGBDTC_SigNext(s));
  }
  if ((*s == 'X') || (*s == 'L') || (*s == 'U')) {
    s++;
    if ((*s >= '0') && (*s <= '9')) {
      while ((*s >= '0') && (*s <= '9'))
        s++;
    } else {
      while (*s && (*s != ';'))
        s++;
      if (*s == ';')
        s++;
    }
    return (s);
  }
  if (*s == 'A') {
    s++;
    if ((*s >= '0') && (*s <= '9')) {
      while ((*s >= '0') && (*s <= '9'))
        s++;
      return (BGBDTC_SigNext(s));
    } else {
      return (BGBDTC_SigNext(s + 1));
    }
  }
  return (s);
}
```