user: 请从给定的汇编指令推导出C源代码：

```asm
<cCoreBytesRshiftCountnmfbytesfromlentolen>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %edi,-0x14(%rbp)
  mov    %esi,-0x18(%rbp)
  mov    %edx,-0x1c(%rbp)
  mov    %ecx,-0x20(%rbp)
  mov    %r8d,-0x24(%rbp)
  mov    %r9,-0x30(%rbp)
  cmpl   $0x0,-0x18(%rbp)
  jns    L117
  mov    -0x24(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movzbl %al,%edx
  mov    -0x18(%rbp),%eax
  neg    %eax
  mov    %eax,%ecx
  shr    %cl,%edx
  mov    %edx,%eax
  jmp    L87
L117:
  mov    -0x24(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movzbl %al,%edx
  mov    -0x18(%rbp),%eax
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
L87:
  mov    %eax,-0x8(%rbp)
  mov    -0x24(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0xc(%rbp)
  jmp    L31
L83:
  mov    -0xc(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  mov    %eax,-0x4(%rbp)
  cmpl   $0x0,-0x20(%rbp)
  jns    L111
  mov    -0x4(%rbp),%eax
  and    -0x1c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x20(%rbp),%eax
  neg    %eax
  mov    %eax,%ecx
  shr    %cl,%edx
  mov    %edx,%eax
  mov    %eax,%ecx
  jmp    L21
L111:
  mov    -0x4(%rbp),%eax
  and    -0x1c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x20(%rbp),%eax
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  mov    %eax,%ecx
L21:
  mov    -0x8(%rbp),%eax
  mov    %eax,%esi
  mov    -0xc(%rbp),%eax
  sub    -0x24(%rbp),%eax
  cltq
  lea    -0x1(%rax),%rdx
  mov    0x18(%rbp),%rax
  add    %rdx,%rax
  or     %esi,%ecx
  mov    %ecx,%edx
  mov    %dl,(%rax)
  cmpl   $0x0,-0x18(%rbp)
  jns    L43
  mov    -0x4(%rbp),%edx
  mov    -0x18(%rbp),%eax
  neg    %eax
  mov    %eax,%ecx
  shr    %cl,%edx
  mov    %edx,%eax
  jmp    L38
L43:
  mov    -0x4(%rbp),%edx
  mov    -0x18(%rbp),%eax
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
L38:
  mov    %eax,-0x8(%rbp)
  addl   $0x1,-0xc(%rbp)
L31:
  mov    -0x14(%rbp),%eax
  cmp    -0xc(%rbp),%eax
  jg     L83
  mov    -0x14(%rbp),%eax
  cmp    0x10(%rbp),%eax
  jne    L60
  movl   $0x0,-0x4(%rbp)
  jmp    L12
L60:
  mov    -0x14(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  mov    %eax,-0x4(%rbp)
L12:
  cmpl   $0x0,-0x20(%rbp)
  jns    L81
  mov    -0x4(%rbp),%eax
  and    -0x1c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x20(%rbp),%eax
  neg    %eax
  mov    %eax,%ecx
  shr    %cl,%edx
  mov    %edx,%eax
  mov    %eax,%ecx
  jmp    L9
L81:
  mov    -0x4(%rbp),%eax
  and    -0x1c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x20(%rbp),%eax
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  mov    %eax,%ecx
L9:
  mov    -0x8(%rbp),%eax
  mov    %eax,%esi
  mov    -0x14(%rbp),%eax
  sub    -0x24(%rbp),%eax
  cltq
  lea    -0x1(%rax),%rdx
  mov    0x18(%rbp),%rax
  add    %rdx,%rax
  or     %esi,%ecx
  mov    %ecx,%edx
  mov    %dl,(%rax)
  nop
  pop    %rbp
  ret
```

assistant: ```c
int cCoreBytesRshiftCountnmfbytesfromlentolen(int count, int n, int m, int f, int b, unsigned char *pFrom, int fromLen, unsigned char *pTo, int toLen) {
  int j;
  int x;
  int digit;
  ;
l1:;
  x = ((n < 0) ? ((unsigned)(pFrom[b]) >> -n) : ((unsigned)(pFrom[b]) << n));
  ;
l2:;
  for (j = (b + 1); j <= (count - 1); j += 1) {
    digit = pFrom[j];
    pTo[(j - b) - 1] = ((((f < 0) ? ((unsigned)(digit & m) >> -f) : ((unsigned)(digit & m) << f))) | x);
    x = ((n < 0) ? ((unsigned)digit >> -n) : ((unsigned)digit << n));
  }
  if (count == fromLen) {
    digit = 0;
  } else {
    digit = pFrom[count];
  }
  pTo[(count - b) - 1] = ((((f < 0) ? ((unsigned)(digit & m) >> -f) : ((unsigned)(digit & m) << f))) | x);
}
```