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

```asm
<in_alpha>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    %esi,-0x1c(%rbp)
  mov    %edx,-0x20(%rbp)
  mov    %rcx,-0x28(%rbp)
  mov    %r8,-0x30(%rbp)
  mov    %r9,-0x38(%rbp)
  mov    -0x28(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,-0x20(%rbp)
  jge    L83
  cmpl   $0x0,0x10(%rbp)
  je     L144
  mov    -0x38(%rbp),%rax
  mov    (%rax),%eax
  test   %eax,%eax
  je     L144
  mov    -0x1c(%rbp),%eax
  sub    $0x1,%eax
  cmp    %eax,-0x20(%rbp)
  jge    L177
  mov    -0x20(%rbp),%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    0x10(%rbp),%esi
  mov    %eax,%edi
  call   <is_alpha@plt>
  test   %rax,%rax
  je     L177
  mov    $0x1,%eax
  jmp    L247
L177:
  mov    $0x0,%eax
L247:
  mov    %eax,-0x4(%rbp)
  cmpl   $0x0,-0x4(%rbp)
  je     L183
  mov    $0x21,%edx
  jmp    L184
L183:
  mov    $0x24,%edx
L184:
  mov    -0x30(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x38(%rbp),%rax
  movl   $0x0,(%rax)
L144:
  mov    $0x1,%eax
  jmp    L19
L83:
  mov    -0x20(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    0x10(%rbp),%esi
  mov    %eax,%edi
  call   <is_alpha@plt>
  test   %rax,%rax
  jne    L114
  mov    -0x28(%rbp),%rax
  movl   $0x0,(%rax)
  mov    -0x38(%rbp),%rax
  movl   $0x0,(%rax)
  mov    $0x0,%eax
  jmp    L19
L114:
  cmpl   $0x0,0x10(%rbp)
  je     L158
  mov    -0x20(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0x25,%eax
  jne    L158
  mov    -0x20(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,%edx
  mov    -0x28(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x30(%rbp),%rax
  movl   $0x42,(%rax)
  mov    -0x38(%rbp),%rax
  movl   $0x0,(%rax)
  mov    $0x1,%eax
  jmp    L19
L158:
  mov    -0x1c(%rbp),%eax
  sub    $0x1,%eax
  cmp    %eax,-0x20(%rbp)
  jge    L193
  mov    -0x20(%rbp),%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    0x10(%rbp),%esi
  mov    %eax,%edi
  call   <is_alpha@plt>
  test   %rax,%rax
  je     L193
  mov    $0x1,%eax
  jmp    L172
L193:
  mov    $0x0,%eax
L172:
  mov    %eax,-0x4(%rbp)
  cmpl   $0x0,-0x4(%rbp)
  je     L10
  mov    -0x20(%rbp),%eax
  add    $0x2,%eax
  mov    %eax,%edx
  jmp    L100
L10:
  mov    -0x20(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,%edx
L100:
  mov    -0x28(%rbp),%rax
  mov    %edx,(%rax)
  cmpl   $0x0,-0x4(%rbp)
  je     L16
  mov    $0x21,%edx
  jmp    L18
L16:
  mov    $0x24,%edx
L18:
  mov    -0x30(%rbp),%rax
  mov    %edx,(%rax)
  cmpl   $0x0,-0x4(%rbp)
  je     L175
  cmpl   $0x0,0x10(%rbp)
  je     L175
  mov    -0x20(%rbp),%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0x25,%eax
  jne    L175
  mov    $0x1,%eax
  jmp    L7
L175:
  mov    $0x0,%eax
L7:
  mov    %eax,%edx
  mov    -0x38(%rbp),%rax
  mov    %edx,(%rax)
  mov    $0x1,%eax
L19:
  leave
  ret
```

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;
}
```