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

```asm
<byteprocess>:
  endbr64
  movslq (%rsi),%rax
  push   %r14
  mov    %rdi,%r9
  push   %r13
  push   %r12
  push   %rbp
  movslq %ecx,%rbp
  lea    0x1(%rax),%ecx
  push   %rbx
  mov    %rdx,%rbx
  lea    (%rdi,%rax,4),%rdx
  cmp    $0x1,%r8d
  je     L77
  imul   $0xaaaaaaab,%r8d,%eax
  mov    %ecx,(%rsi)
  add    $0x2aaaaaaa,%eax
  ror    %eax
  cmp    $0x2aaaaaab,%eax
  sbb    %eax,%eax
  and    $0x17,%eax
  add    $0x385,%eax
  mov    %eax,(%rdx)
  test   %r8d,%r8d
  jle    L88
  movslq %ebp,%rdx
  mov    (%rsi),%eax
  xor    %r10d,%r10d
  movabs $0x48d159e26af37c05,%r11
  lea    (%rbx,%rdx,8),%rdi
  nopl   0x0(%rax)
L12:
  mov    %r8d,%ecx
  mov    (%rdi),%rdx
  lea    0x0(%rbp,%r10,1),%r12d
  sub    %r10d,%ecx
  cmp    $0x5,%ecx
  jg     L23
  movslq %r12d,%r12
  lea    0x1(%rax),%r8d
  cltq
  mov    (%rbx,%r12,8),%rdi
  lea    0x0(,%r12,8),%rdx
  mov    %r8d,(%rsi)
  mov    %edi,(%r9,%rax,4)
  cmp    $0x1,%ecx
  je     L88
  movslq (%rsi),%rax
  mov    0x8(%rbx,%rdx,1),%rdi
  lea    0x1(%rax),%r8d
  mov    %r8d,(%rsi)
  mov    %edi,(%r9,%rax,4)
  cmp    $0x2,%ecx
  je     L88
  movslq (%rsi),%rax
  mov    0x10(%rbx,%rdx,1),%rdi
  lea    0x1(%rax),%r8d
  mov    %r8d,(%rsi)
  mov    %edi,(%r9,%rax,4)
  cmp    $0x3,%ecx
  je     L88
  movslq (%rsi),%rax
  mov    0x18(%rbx,%rdx,1),%rdi
  lea    0x1(%rax),%r8d
  mov    %r8d,(%rsi)
  mov    %edi,(%r9,%rax,4)
  cmp    $0x4,%ecx
  je     L88
  movslq (%rsi),%rax
  mov    0x20(%rbx,%rdx,1),%rdx
  lea    0x1(%rax),%ecx
  mov    %ecx,(%rsi)
  mov    %edx,(%r9,%rax,4)
L88:
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
  nopw   0x0(%rax,%rax,1)
L23:
  mov    0x8(%rdi),%rcx
  shl    $0x28,%rdx
  lea    0x4(%rax),%r13d
  add    $0x6,%r10d
  shl    $0x20,%rcx
  or     %rdx,%rcx
  mov    0x10(%rdi),%rdx
  or     0x28(%rdi),%rcx
  shl    $0x18,%rdx
  or     %rdx,%rcx
  mov    0x18(%rdi),%rdx
  shl    $0x10,%rdx
  or     %rdx,%rcx
  mov    0x20(%rdi),%rdx
  shl    $0x8,%rdx
  or     %rdx,%rcx
  mov    %rcx,%rdx
  shr    $0x2,%rdx
  mov    %rdx,%rax
  mul    %r11
  mov    %rdx,%r12
  shr    $0x8,%rdx
  shr    $0x6,%r12
  imul   $0x384,%r12,%rax
  sub    %rax,%rcx
  mov    %ecx,(%r9,%r13,4)
  mov    (%rsi),%eax
  mov    %r12,%rcx
  lea    0x3(%rax),%r14d
  mov    %rdx,%rax
  mul    %r11
  mov    %rdx,%r13
  shr    $0x8,%rdx
  shr    $0x6,%r13
  imul   $0x384,%r13,%rax
  sub    %rax,%rcx
  mov    %ecx,(%r9,%r14,4)
  mov    (%rsi),%eax
  lea    0x2(%rax),%ecx
  mov    %rdx,%rax
  mul    %r11
  mov    %r13,%rax
  mov    %rdx,%r12
  shr    $0x8,%rdx
  shr    $0x6,%r12
  imul   $0x384,%r12,%r14
  sub    %r14,%rax
  mov    %eax,(%r9,%rcx,4)
  mov    (%rsi),%eax
  lea    0x1(%rax),%r13d
  mov    %rdx,%rax
  mul    %r11
  mov    %rdx,%rcx
  shr    $0x8,%rdx
  shr    $0x6,%rcx
  imul   $0x384,%rcx,%rax
  sub    %rax,%r12
  mov    %rdx,%rax
  mul    %r11
  mov    %r12d,(%r9,%r13,4)
  mov    (%rsi),%r12d
  add    $0x30,%rdi
  shr    $0x6,%rdx
  imul   $0x384,%rdx,%rdx
  sub    %rdx,%rcx
  mov    %ecx,(%r9,%r12,4)
  mov    (%rsi),%eax
  add    $0x5,%eax
  mov    %eax,(%rsi)
  cmp    %r10d,%r8d
  jg     L12
  jmp    L88
  nopw   0x0(%rax,%rax,1)
L77:
  mov    %ecx,(%rsi)
  movl   $0x391,(%rdx)
  movslq (%rsi),%rax
  mov    (%rbx,%rbp,8),%rdx
  lea    0x1(%rax),%ecx
  mov    %ecx,(%rsi)
  mov    %edx,(%rdi,%rax,4)
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
```

assistant: ```c
void byteprocess(int *chainemc, int *mclength, uint8_t chaine[], int start, int length, int block) {
  int debug = 0;
  int len = 0;
  unsigned int chunkLen = 0;
  uint64_t mantisa = 0ULL;
  uint64_t total = 0ULL;
  if (debug)
    printf("\nEntering byte mode at position %d\n", start);
  if (length == 1) {
    chainemc[(*mclength)++] = 913;
    chainemc[(*mclength)++] = chaine[start];
    if (debug) {
      printf("913 %d\n", chainemc[*mclength - 1]);
    }
  } else {
    if (length % 6 == 0) {
      chainemc[(*mclength)++] = 924;
      if (debug)
        printf("924 ");
    } else {
      chainemc[(*mclength)++] = 901;
      if (debug)
        printf("901 ");
    }
    while (len < length) {
      chunkLen = length - len;
      if (6 <= chunkLen) {
        chunkLen = 6;
        len += chunkLen;
        total = 0ULL;
        while (chunkLen--) {
          mantisa = chaine[start++];
          total |= mantisa << (uint64_t)(chunkLen * 8ULL);
        }
        chunkLen = 5;
        while (chunkLen--) {
          chainemc[*mclength + chunkLen] = (int)(total % 900ULL);
          total /= 900ULL;
        }
        *mclength += 5;
      } else {
        len += chunkLen;
        while (chunkLen--) {
          chainemc[(*mclength)++] = chaine[start++];
        }
      }
    }
  }
}
```