user: 请将这段汇编代码片段转换成等效的C代码：

```asm
<sf_gcWindow>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x38(%rbp)
  mov    %esi,-0x3c(%rbp)
  mov    %edx,-0x40(%rbp)
  mov    %ecx,-0x44(%rbp)
  mov    %r8d,-0x48(%rbp)
  mov    %r9,-0x50(%rbp)
  mov    -0x40(%rbp),%eax
  imul   -0x3c(%rbp),%eax
  movslq %eax,%rdx
  imul   $0x51eb851f,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x5,%edx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  mov    %eax,-0x20(%rbp)
  mov    -0x44(%rbp),%eax
  imul   -0x3c(%rbp),%eax
  movslq %eax,%rdx
  imul   $0x51eb851f,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x5,%edx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  mov    %eax,-0x1c(%rbp)
  mov    -0x48(%rbp),%eax
  cmp    -0x3c(%rbp),%eax
  jle    L60
  mov    $0xffffffff,%eax
  jmp    L30
L60:
  mov    -0x50(%rbp),%rax
  movl   $0x0,(%rax)
  mov    0x10(%rbp),%rax
  movl   $0x0,(%rax)
  mov    -0x38(%rbp),%rax
  mov    %rax,-0x18(%rbp)
  mov    -0x38(%rbp),%rax
  mov    %rax,-0x10(%rbp)
  mov    -0x3c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x8(%rbp)
  movl   $0x0,-0x24(%rbp)
  jmp    L180
L194:
  mov    0x10(%rbp),%rax
  mov    (%rax),%edx
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x47,%al
  je     L109
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x43,%al
  jne    L61
L109:
  mov    $0x1,%eax
  jmp    L156
L61:
  mov    $0x0,%eax
L156:
  add    %eax,%edx
  mov    0x10(%rbp),%rax
  mov    %edx,(%rax)
  addq   $0x1,-0x10(%rbp)
  addl   $0x1,-0x24(%rbp)
L180:
  mov    -0x24(%rbp),%eax
  cmp    -0x48(%rbp),%eax
  jl     L194
  mov    0x10(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,-0x20(%rbp)
  jg     L147
  mov    0x10(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,-0x1c(%rbp)
  jge    L172
L147:
  mov    $0x0,%eax
  jmp    L30
L57:
  mov    0x10(%rbp),%rax
  mov    (%rax),%edx
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x47,%al
  je     L76
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x43,%al
  jne    L137
L76:
  mov    $0x1,%eax
  jmp    L168
L137:
  mov    $0x0,%eax
L168:
  sub    %eax,%edx
  mov    0x10(%rbp),%rax
  mov    %edx,(%rax)
  mov    0x10(%rbp),%rax
  mov    (%rax),%edx
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x47,%al
  je     L1
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x43,%al
  jne    L120
L1:
  mov    $0x1,%eax
  jmp    L89
L120:
  mov    $0x0,%eax
L89:
  add    %eax,%edx
  mov    0x10(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x50(%rbp),%rax
  mov    (%rax),%eax
  lea    0x1(%rax),%edx
  mov    -0x50(%rbp),%rax
  mov    %edx,(%rax)
  addq   $0x1,-0x10(%rbp)
  addq   $0x1,-0x18(%rbp)
  mov    0x10(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,-0x20(%rbp)
  jg     L91
  mov    0x10(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,-0x1c(%rbp)
  jge    L172
L91:
  mov    $0x0,%eax
  jmp    L30
L172:
  mov    -0x10(%rbp),%rax
  cmp    -0x8(%rbp),%rax
  jne    L57
  mov    $0x1,%eax
L30:
  pop    %rbp
  ret
```

assistant: ```c
int sf_gcWindow(char *seq, int length, int gc_min_percent, int gc_max_percent, int window_size, int *window_start, int *gc_count) {
  int i, gc_min, gc_max;
  char *iptr, *mptr, *eptr;
  gc_min = (gc_min_percent * length) / 100;
  gc_max = (gc_max_percent * length) / 100;
  if (window_size > length) {
    return -1;
  }
  *window_start = 0;
  *gc_count = 0;
  iptr = seq;
  mptr = seq;
  eptr = (seq + length);
  for (i = 0; i < window_size; i++) {
    *gc_count += (*mptr == 'G' || *mptr == 'C') ? 1 : 0;
    mptr++;
  }
  if (*gc_count < gc_min || *gc_count > gc_max) {
    return 0;
  }
  while (mptr != eptr) {
    *gc_count -= (*iptr == 'G' || *iptr == 'C') ? 1 : 0;
    *gc_count += (*mptr == 'G' || *mptr == 'C') ? 1 : 0;
    ++*window_start;
    mptr++;
    iptr++;
    if (*gc_count < gc_min || *gc_count > gc_max) {
      return 0;
    }
  }
  return 1;
}
```