user: 这段汇编代码用C语言表示是什么样的:

```asm
<searchwindex>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  mov    %rdi,%rbp
  push   %rbx
  sub    $0x28,%rsp
  mov    %rsi,0x8(%rsp)
  mov    %rdx,0x10(%rsp)
  mov    %rcx,0x18(%rsp)
  call   <ftell@plt>
  mov    D108(%rip),%r12
  test   %rax,%rax
  je     L415
L430:
  mov    D83(%rip),%rsi
  mov    D193(%rip),%r15
  cmp    %rsi,%r12
  jl     L306
L181:
  add    %r12,%rsi
  mov    (%r15),%edx
  sar    %rsi
  mov    %rsi,%r12
  jne    L156
  xor    %esi,%esi
  mov    %rbp,%rdi
  call   <fseek@plt>
  mov    %rax,%rbx
  test   %rax,%rax
  jne    L381
  mov    D152(%rip),%r13
L298:
  mov    0x8(%rsp),%r14
  jmp    L97
  cs nopw 0x0(%rax,%rax,1)
L147:
  cmp    $0x9,%eax
  je     L261
  movzbl (%r14),%ecx
  cmp    %eax,%ecx
  jne    L111
  add    $0x1,%r14
L97:
  mov    %rbp,%rdi
  call   <getc@plt>
  test   $0xffffffdf,%eax
  jne    L147
L261:
  xor    %eax,%eax
L111:
  cmp    %eax,0x0(%r13)
  je     L626
  movzbl (%r14),%edx
  cmp    %eax,%edx
  jle    L626
  lea    0x1(%rbx),%rsi
  mov    D108(%rip),%r12
  mov    %rsi,D98(%rip)
L517:
  cmp    %rsi,%r12
  jge    L181
L306:
  mov    (%r15),%edx
  mov    %rbp,%rdi
  call   <fseek@plt>
  test   %rax,%rax
  jne    L381
  mov    D98(%rip),%rdx
  mov    D152(%rip),%r13
L522:
  test   %rdx,%rdx
  jne    L518
L213:
  mov    0x8(%rsp),%rbx
  jmp    L417
  nopl   (%rax)
L519:
  mov    D98(%rip),%rdx
  movzbl (%rbx),%ecx
  add    $0x1,%rdx
  mov    %rdx,D98(%rip)
  test   $0xffffffdf,%eax
  je     L74
  cmp    $0x9,%eax
  je     L74
  cmp    %ecx,%eax
  jne    L310
  add    $0x1,%rbx
L417:
  mov    %rbp,%rdi
  call   <getc@plt>
  cmp    %eax,0x0(%r13)
  jne    L519
L217:
  xor    %eax,%eax
L83:
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L626:
  sub    $0x1,%r12
  mov    D98(%rip),%rsi
  mov    %r12,D98(%rip)
  jmp    L517
  nopw   0x0(%rax,%rax,1)
L156:
  lea    -0x1(%rsi),%rsi
  mov    %rbp,%rdi
  call   <fseek@plt>
  test   %rax,%rax
  jne    L381
  mov    D152(%rip),%r13
  mov    %r12,%rbx
  jmp    L108
  nopl   (%rax)
L80:
  cmp    $0xa,%eax
  je     L602
  add    $0x1,%rbx
L108:
  mov    %rbp,%rdi
  call   <getc@plt>
  cmp    %eax,0x0(%r13)
  jne    L80
L602:
  mov    %rbp,%rdi
  call   <ferror@plt>
  test   %rax,%rax
  je     L298
L381:
  mov    $0xffffffff,%eax
L384:
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L40:
  cmp    $0xa,%eax
  je     L628
  addq   $0x1,D98(%rip)
L518:
  mov    %rbp,%rdi
  call   <getc@plt>
  cmp    %eax,0x0(%r13)
  jne    L40
L628:
  mov    %rbp,%rdi
  call   <ferror@plt>
  test   %rax,%rax
  je     L213
  jmp    L381
  xchg   %ax,%ax
L74:
  xor    %eax,%eax
L310:
  cmp    %ecx,%eax
  jl     L522
  jne    L217
L436:
  mov    %rbp,%rdi
  call   <fgetc@plt>
  cmp    $0x20,%eax
  je     L436
  cmp    $0x9,%eax
  je     L436
  cmp    $0x28,%eax
  je     L217
  cmp    $0xa,%eax
  je     L217
  lea    D98(%rip),%rbx
  mov    %rbx,%r14
  lea    0xff(%rbx),%r12
  jmp    L70
L664:
  cmp    %r12,%r14
  jae    L632
  mov    %al,(%r14)
  add    $0x1,%r14
L632:
  mov    %rbp,%rdi
  call   <getc@plt>
  cmp    $0x20,%eax
  je     L373
  cmp    $0x9,%eax
  je     L373
  cmp    $0x28,%eax
  je     L134
  cmp    $0xa,%eax
  je     L134
L70:
  cmp    %eax,0x0(%r13)
  jne    L664
L373:
  cmp    %rbx,%r14
  je     L217
  movb   $0x0,(%r14)
  cmp    $0x9,%eax
  je     L91
  cmp    $0x20,%eax
  jne    L197
L91:
  mov    %rbp,%rdi
  call   <fgetc@plt>
  cmp    $0x20,%eax
  je     L91
  cmp    $0x9,%eax
  je     L91
L197:
  cmp    $0x28,%eax
  jne    L217
  lea    D198(%rip),%r12
  mov    %r12,%r15
  lea    0x1f(%r12),%r14
L289:
  mov    %rbp,%rdi
  call   <fgetc@plt>
  cmp    $0x29,%eax
  je     L500
  cmp    $0xa,%eax
  je     L461
  cmp    %eax,0x0(%r13)
  je     L461
  lea    -0x41(%rax),%ecx
  lea    0x20(%rax),%edx
  cmp    $0x1a,%ecx
  cmovb  %edx,%eax
  add    $0x1,%r15
  mov    %al,-0x1(%r15)
  cmp    %r14,%r15
  je     L599
  jmp    L289
  nopl   (%rax)
L107:
  cmp    $0xa,%eax
  je     L461
  cmp    %eax,0x0(%r13)
  je     L461
L599:
  mov    %rbp,%rdi
  call   <fgetc@plt>
  cmp    $0x29,%eax
  jne    L107
  movb   $0x0,D81(%rip)
L154:
  cmpl   $0x29,0x0(%r13)
  jne    L227
  jmp    L217
  nopl   0x0(%rax,%rax,1)
L495:
  cmp    $0xa,%eax
  je     L319
L227:
  mov    %rbp,%rdi
  call   <getc@plt>
  cmp    %eax,0x0(%r13)
  jne    L495
  cmp    $0xa,%eax
  jne    L217
L319:
  mov    0x10(%rsp),%rax
  mov    %rbx,(%rax)
  mov    0x18(%rsp),%rax
  mov    %r12,(%rax)
  mov    $0x1,%eax
  jmp    L384
  xchg   %ax,%ax
L415:
  mov    D110(%rip),%rax
  xor    %esi,%esi
  mov    %rbp,%rdi
  movq   $0x0,D98(%rip)
  mov    (%rax),%edx
  call   <fseek@plt>
  mov    %rbp,%rdi
  call   <ftell@plt>
  mov    %rax,D85(%rip)
  mov    %rax,%r12
  jmp    L430
L134:
  cmp    %rbx,%r14
  je     L217
  movb   $0x0,(%r14)
  jmp    L197
L461:
  movb   $0x0,(%r15)
  xor    %eax,%eax
  jmp    L83
L500:
  movb   $0x0,(%r15)
  cmp    %r12,%r15
  jne    L154
  xor    %eax,%eax
  jmp    L83
```

assistant: ```c
int searchwindex(FILE *wf, char *title, char **ppage, char **psection) {
  static char page[256], section[32];
  static long low, high;
  long mid0, mid1;
  int c;
  unsigned char *pt;
  char *pc;
  if (ftell(wf) == 0) {
    low = 0;
    fseek(wf, (off_t)0, SEEK_END);
    high = ftell(wf);
  }
  while (low <= high) {
    pt = (unsigned char *)title;
    mid0 = mid1 = (low + high) >> 1;
    if (mid0 == 0) {
      if (fseek(wf, (off_t)0, SEEK_SET) != 0)
        return -1;
    } else {
      if (fseek(wf, (off_t)mid0 - 1, SEEK_SET) != 0)
        return -1;
      while ((c = getc(wf)) != EOF && c != '\n')
        mid1++;
      if (ferror(wf))
        return -1;
    }
    for (;;) {
      if ((c = getc(wf)) == ' ' || c == '\t')
        c = 0;
      if (c == 0 || c != *pt)
        break;
      pt++;
    }
    if (c == EOF || *pt <= c) {
      high = mid0 - 1;
    } else {
      low = mid1 + 1;
    }
  }
  if (fseek(wf, (off_t)low, SEEK_SET) != 0)
    return -1;
  do {
    if (low != 0) {
      while ((c = getc(wf)) != EOF && c != '\n')
        low++;
      if (ferror(wf))
        return -1;
    }
    pt = (unsigned char *)title;
    for (;;) {
      if ((c = getc(wf)) == EOF)
        return 0;
      low++;
      if (c == ' ' || c == '\t')
        c = 0;
      if (c == 0 || c != *pt)
        break;
      pt++;
    }
  } while (c < *pt);
  if (*pt != c)
    return 0;
  while ((c = fgetc(wf)) == ' ' || c == '\t') {
  }
  pc = page;
  while (c != ' ' && c != '\t' && c != '(' && c != '\n' && c != EOF) {
    if (pc < ((page) + (sizeof(page) / sizeof((page)[0]))) - 1)
      *pc++ = c;
    c = getc(wf);
  }
  if (pc == page)
    return 0;
  *pc = 0;
  while (c == ' ' || c == '\t')
    c = fgetc(wf);
  if (c != '(')
    return 0;
  pc = section;
  while ((c = fgetc(wf)) != ')' && c != '\n' && c != EOF) {
    if ('A' <= c && c <= 'Z')
      c = c - 'A' + 'a';
    if (pc < ((section) + (sizeof(section) / sizeof((section)[0]))) - 1)
      *pc++ = c;
  }
  *pc = 0;
  if (c != ')' || pc == section)
    return 0;
  while (c != EOF && c != '\n')
    c = getc(wf);
  if (c != '\n')
    return 0;
  *ppage = page;
  *psection = section;
  return 1;
}
```