user: 请将以下的汇编代码转换成C语言代码：

```asm
<ss_rollingHamming>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x58(%rbp)
  mov    %rsi,-0x60(%rbp)
  mov    %edx,-0x64(%rbp)
  mov    %ecx,-0x68(%rbp)
  mov    %r8d,-0x6c(%rbp)
  mov    %r9,-0x78(%rbp)
  mov    -0x68(%rbp),%eax
  sub    -0x64(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x44(%rbp)
  mov    -0x44(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x6c(%rbp),%eax
  cltq
  add    %rdx,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x20(%rbp)
  mov    -0x60(%rbp),%rax
  mov    %rax,-0x28(%rbp)
  mov    -0x6c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x40(%rbp)
  jmp    L130
L152:
  mov    -0x58(%rbp),%rax
  mov    %rax,-0x38(%rbp)
  mov    -0x28(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x28(%rbp)
  mov    %rax,-0x30(%rbp)
  mov    -0x64(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x8(%rbp)
  jmp    L25
L75:
  mov    -0x38(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x38(%rbp)
  movzbl (%rax),%ecx
  mov    -0x30(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x30(%rbp)
  movzbl (%rax),%eax
  cmp    %al,%cl
  je     L25
  mov    -0x40(%rbp),%rax
  mov    (%rax),%eax
  lea    0x1(%rax),%edx
  mov    -0x40(%rbp),%rax
  mov    %edx,(%rax)
L25:
  mov    -0x30(%rbp),%rax
  cmp    -0x8(%rbp),%rax
  jb     L75
  addq   $0x4,-0x40(%rbp)
L130:
  mov    -0x40(%rbp),%rax
  cmp    -0x20(%rbp),%rax
  jb     L152
  cmpl   $0x0,-0x6c(%rbp)
  jle    L117
  mov    -0x6c(%rbp),%eax
  mov    %eax,-0x48(%rbp)
  mov    -0x6c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x20(%rbp)
  movq   $0x0,-0x40(%rbp)
  jmp    L93
L61:
  mov    -0x48(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x38(%rbp)
  mov    -0x60(%rbp),%rax
  mov    %rax,-0x30(%rbp)
  mov    -0x64(%rbp),%eax
  cltq
  mov    -0x48(%rbp),%edx
  movslq %edx,%rdx
  sub    %rdx,%rax
  mov    %rax,%rcx
  mov    -0x30(%rbp),%rax
  add    %rcx,%rax
  mov    %rax,-0x10(%rbp)
  jmp    L100
L102:
  mov    -0x38(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x38(%rbp)
  movzbl (%rax),%ecx
  mov    -0x30(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x30(%rbp)
  movzbl (%rax),%eax
  cmp    %al,%cl
  je     L100
  mov    -0x40(%rbp),%rax
  mov    (%rax),%eax
  lea    0x1(%rax),%edx
  mov    -0x40(%rbp),%rax
  mov    %edx,(%rax)
L100:
  mov    -0x30(%rbp),%rax
  cmp    -0x10(%rbp),%rax
  jb     L102
  addq   $0x4,-0x40(%rbp)
  subl   $0x1,-0x48(%rbp)
L93:
  mov    -0x40(%rbp),%rax
  cmp    -0x20(%rbp),%rax
  jb     L61
  movl   $0x1,-0x48(%rbp)
  mov    -0x44(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x6c(%rbp),%eax
  add    %eax,%eax
  cltq
  add    %rdx,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x20(%rbp)
  mov    -0x44(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x6c(%rbp),%eax
  cltq
  add    %rdx,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x40(%rbp)
  jmp    L39
L125:
  mov    -0x58(%rbp),%rax
  mov    %rax,-0x38(%rbp)
  mov    -0x44(%rbp),%eax
  cltq
  mov    -0x64(%rbp),%edx
  movslq %edx,%rdx
  sub    %rdx,%rax
  mov    %rax,%rcx
  mov    -0x48(%rbp),%eax
  cltq
  lea    (%rcx,%rax,1),%rdx
  mov    -0x60(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x30(%rbp)
  mov    -0x64(%rbp),%eax
  cltq
  mov    -0x48(%rbp),%edx
  movslq %edx,%rdx
  sub    %rdx,%rax
  mov    %rax,%rcx
  mov    -0x30(%rbp),%rax
  add    %rcx,%rax
  mov    %rax,-0x18(%rbp)
  jmp    L2
L103:
  mov    -0x38(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x38(%rbp)
  movzbl (%rax),%ecx
  mov    -0x30(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x30(%rbp)
  movzbl (%rax),%eax
  cmp    %al,%cl
  je     L2
  mov    -0x40(%rbp),%rax
  mov    (%rax),%eax
  lea    0x1(%rax),%edx
  mov    -0x40(%rbp),%rax
  mov    %edx,(%rax)
L2:
  mov    -0x30(%rbp),%rax
  cmp    -0x18(%rbp),%rax
  jb     L103
  addq   $0x4,-0x40(%rbp)
  addl   $0x1,-0x48(%rbp)
L39:
  mov    -0x40(%rbp),%rax
  cmp    -0x20(%rbp),%rax
  jb     L125
L117:
  mov    $0x0,%eax
  pop    %rbp
  ret
```

assistant: ```c
int ss_rollingHamming(const char *s1, const char *s2, int len1, int len2, int overlap, int *hamming_arr_ptr) {
  const int num_positions = len2 - len1 + 1;
  int *hamming_arr_ptr_lim = hamming_arr_ptr + num_positions + overlap;
  int *ham_ptr;
  char *s1_ptr;
  char *s2_ptr;
  char *s2_start_ptr = (char *)s2;
  int i;
  for (ham_ptr = hamming_arr_ptr + overlap; ham_ptr < hamming_arr_ptr_lim; ham_ptr++) {
    s1_ptr = (char *)s1;
    s2_ptr = s2_start_ptr++;
    const char *s2_ptr_lim = s2_ptr + len1;
    while (s2_ptr < s2_ptr_lim) {
      if (*s1_ptr++ != *s2_ptr++) {
        (*ham_ptr)++;
      }
    }
  }
  if (overlap > 0) {
    i = overlap;
    hamming_arr_ptr_lim = hamming_arr_ptr + overlap;
    for (ham_ptr = 0; ham_ptr < hamming_arr_ptr_lim; ham_ptr++, i--) {
      s1_ptr = (char *)s1 + i;
      s2_ptr = (char *)s2;
      const char *s2_ptr_lim = s2_ptr + len1 - i;
      while (s2_ptr < s2_ptr_lim) {
        if (*s1_ptr++ != *s2_ptr++) {
          (*ham_ptr)++;
        }
      }
    }
    i = 1;
    hamming_arr_ptr_lim = hamming_arr_ptr + num_positions + 2 * overlap;
    for (ham_ptr = hamming_arr_ptr + num_positions + overlap; ham_ptr < hamming_arr_ptr_lim; ham_ptr++, i++) {
      s1_ptr = (char *)s1;
      s2_ptr = (char *)s2 + num_positions - len1 + i;
      const char *s2_ptr_lim = s2_ptr + len1 - i;
      while (s2_ptr < s2_ptr_lim) {
        if (*s1_ptr++ != *s2_ptr++) {
          (*ham_ptr)++;
        }
      }
    }
  }
  return 0;
}
```