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

```asm
<in_alpha>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  mov    %rdi,%r13
  push   %r12
  mov    %esi,%r12d
  push   %rbp
  push   %rbx
  mov    %edx,%ebx
  sub    $0x28,%rsp
  mov    0x60(%rsp),%r14d
  cmp    %edx,(%rcx)
  jle    L63
  mov    $0x1,%eax
  test   %r14d,%r14d
  je     L84
  mov    (%r9),%edx
  test   %edx,%edx
  je     L84
  sub    $0x1,%r12d
  cmp    %ebx,%r12d
  jg     L62
L74:
  mov    $0x24,%eax
L78:
  mov    %eax,(%r8)
  mov    $0x1,%eax
  movl   $0x0,(%r9)
L84:
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L63:
  movslq %edx,%r15
  mov    %r14d,%esi
  mov    %r9,0x18(%rsp)
  mov    %rcx,%rbp
  shl    $0x2,%r15
  mov    %r8,0x10(%rsp)
  lea    (%rdi,%r15,1),%rdx
  mov    (%rdx),%edi
  mov    %rdx,0x8(%rsp)
  call   <is_alpha@plt>
  mov    0x8(%rsp),%rdx
  mov    0x10(%rsp),%r8
  test   %rax,%rax
  mov    0x18(%rsp),%r9
  je     L65
  test   %r14d,%r14d
  je     L41
  cmpl   $0x25,(%rdx)
  je     L19
L41:
  sub    $0x1,%r12d
  cmp    %ebx,%r12d
  jg     L105
L70:
  add    $0x1,%ebx
  xor    %r14d,%r14d
  mov    %ebx,0x0(%rbp)
  movl   $0x24,(%r8)
L45:
  mov    %r14d,(%r9)
  add    $0x28,%rsp
  mov    $0x1,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   (%rax)
L105:
  lea    0x4(%r13,%r15,1),%r12
  mov    %r14d,%esi
  mov    %r9,0x10(%rsp)
  mov    (%r12),%edi
  mov    %r8,0x8(%rsp)
  call   <is_alpha@plt>
  mov    0x8(%rsp),%r8
  mov    0x10(%rsp),%r9
  test   %rax,%rax
  je     L70
  add    $0x2,%ebx
  mov    %ebx,0x0(%rbp)
  movl   $0x21,(%r8)
  test   %r14d,%r14d
  je     L45
  xor    %r14d,%r14d
  cmpl   $0x25,(%r12)
  sete   %r14b
  jmp    L45
  nopw   0x0(%rax,%rax,1)
L65:
  movl   $0x0,0x0(%rbp)
  movl   $0x0,(%r9)
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   (%rax)
L19:
  add    $0x1,%ebx
  mov    $0x1,%eax
  mov    %ebx,0x0(%rbp)
  movl   $0x42,(%r8)
  movl   $0x0,(%r9)
  jmp    L84
  cs nopw 0x0(%rax,%rax,1)
L62:
  add    $0x1,%ebx
  mov    %r14d,%esi
  mov    %r9,0x10(%rsp)
  movslq %ebx,%rbx
  mov    %r8,0x8(%rsp)
  mov    (%rdi,%rbx,4),%edi
  call   <is_alpha@plt>
  mov    0x8(%rsp),%r8
  mov    0x10(%rsp),%r9
  mov    %rax,%r10
  mov    $0x21,%eax
  test   %r10,%r10
  jne    L78
  jmp    L74
```

assistant: ```c
int in_alpha(const unsigned int jisdata[], const int length, const int in_posn, unsigned int *p_end, unsigned int *p_cost, unsigned int *p_pcent, unsigned int gs1) {
  int two_alphas;
  if (in_posn < (int)*p_end) {
    if (gs1 && *p_pcent) {
      two_alphas = in_posn < length - 1 && is_alpha(jisdata[in_posn + 1], gs1);
      *p_cost = two_alphas ? 33 : 36;
      *p_pcent = 0;
    }
    return 1;
  }
  if (!is_alpha(jisdata[in_posn], gs1)) {
    *p_end = 0;
    *p_pcent = 0;
    return 0;
  }
  if (gs1 && jisdata[in_posn] == '%') {
    *p_end = in_posn + 1;
    *p_cost = 66;
    *p_pcent = 0;
    return 1;
  }
  two_alphas = in_posn < length - 1 && is_alpha(jisdata[in_posn + 1], gs1);
  *p_end = two_alphas ? in_posn + 2 : in_posn + 1;
  *p_cost = two_alphas ? 33 : 36;
  *p_pcent = two_alphas && gs1 && jisdata[in_posn + 1] == '%';
  return 1;
}
```