user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<rec4a>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x38(%rbp)
  mov    %rsi,-0x40(%rbp)
  mov    %edx,-0x44(%rbp)
  mov    %ecx,-0x48(%rbp)
  mov    %r8d,-0x4c(%rbp)
  mov    -0x40(%rbp),%rax
  mov    %rax,-0x18(%rbp)
  mov    -0x38(%rbp),%rax
  mov    %rax,-0x10(%rbp)
  mov    -0x44(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x8(%rbp)
  movl   $0x0,-0x2c(%rbp)
  jmp    L5
L4:
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  mov    %eax,-0x28(%rbp)
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  mov    %eax,-0x24(%rbp)
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  movzbl %al,%edx
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  mov    %eax,-0x20(%rbp)
  mov    -0x20(%rbp),%ecx
  mov    -0x28(%rbp),%eax
  add    %eax,%ecx
  mov    -0x24(%rbp),%eax
  add    %eax,%ecx
  mov    -0x8(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  mov    %eax,-0x1c(%rbp)
  mov    -0x1c(%rbp),%eax
  add    %ecx,%eax
  add    $0x2,%eax
  shr    $0x2,%eax
  add    %edx,%eax
  add    $0x1,%eax
  shr    %eax
  mov    %eax,%edx
  mov    -0x18(%rbp),%rax
  mov    %dl,(%rax)
  mov    -0x18(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  movzbl %al,%edx
  mov    -0x10(%rbp),%rax
  add    $0x2,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  mov    %eax,-0x28(%rbp)
  mov    -0x28(%rbp),%ecx
  mov    -0x20(%rbp),%eax
  add    %eax,%ecx
  mov    -0x1c(%rbp),%eax
  add    %eax,%ecx
  mov    -0x8(%rbp),%rax
  add    $0x2,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  mov    %eax,-0x24(%rbp)
  mov    -0x24(%rbp),%eax
  add    %ecx,%eax
  add    $0x2,%eax
  shr    $0x2,%eax
  add    %edx,%eax
  add    $0x1,%eax
  shr    %eax
  mov    %eax,%edx
  mov    -0x18(%rbp),%rax
  add    $0x1,%rax
  mov    %dl,(%rax)
  mov    -0x18(%rbp),%rax
  add    $0x2,%rax
  movzbl (%rax),%eax
  movzbl %al,%edx
  mov    -0x10(%rbp),%rax
  add    $0x3,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  mov    %eax,-0x20(%rbp)
  mov    -0x20(%rbp),%ecx
  mov    -0x28(%rbp),%eax
  add    %eax,%ecx
  mov    -0x24(%rbp),%eax
  add    %eax,%ecx
  mov    -0x8(%rbp),%rax
  add    $0x3,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  mov    %eax,-0x1c(%rbp)
  mov    -0x1c(%rbp),%eax
  add    %ecx,%eax
  add    $0x2,%eax
  shr    $0x2,%eax
  add    %edx,%eax
  add    $0x1,%eax
  shr    %eax
  mov    %eax,%edx
  mov    -0x18(%rbp),%rax
  add    $0x2,%rax
  mov    %dl,(%rax)
  mov    -0x18(%rbp),%rax
  add    $0x3,%rax
  movzbl (%rax),%eax
  movzbl %al,%edx
  mov    -0x10(%rbp),%rax
  add    $0x4,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  mov    %eax,-0x28(%rbp)
  mov    -0x28(%rbp),%ecx
  mov    -0x20(%rbp),%eax
  add    %eax,%ecx
  mov    -0x1c(%rbp),%eax
  add    %eax,%ecx
  mov    -0x8(%rbp),%rax
  add    $0x4,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  mov    %eax,-0x24(%rbp)
  mov    -0x24(%rbp),%eax
  add    %ecx,%eax
  add    $0x2,%eax
  shr    $0x2,%eax
  add    %edx,%eax
  add    $0x1,%eax
  shr    %eax
  mov    %eax,%edx
  mov    -0x18(%rbp),%rax
  add    $0x3,%rax
  mov    %dl,(%rax)
  mov    -0x18(%rbp),%rax
  add    $0x4,%rax
  movzbl (%rax),%eax
  movzbl %al,%edx
  mov    -0x10(%rbp),%rax
  add    $0x5,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  mov    %eax,-0x20(%rbp)
  mov    -0x20(%rbp),%ecx
  mov    -0x28(%rbp),%eax
  add    %eax,%ecx
  mov    -0x24(%rbp),%eax
  add    %eax,%ecx
  mov    -0x8(%rbp),%rax
  add    $0x5,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  mov    %eax,-0x1c(%rbp)
  mov    -0x1c(%rbp),%eax
  add    %ecx,%eax
  add    $0x2,%eax
  shr    $0x2,%eax
  add    %edx,%eax
  add    $0x1,%eax
  shr    %eax
  mov    %eax,%edx
  mov    -0x18(%rbp),%rax
  add    $0x4,%rax
  mov    %dl,(%rax)
  mov    -0x18(%rbp),%rax
  add    $0x5,%rax
  movzbl (%rax),%eax
  movzbl %al,%edx
  mov    -0x10(%rbp),%rax
  add    $0x6,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  mov    %eax,-0x28(%rbp)
  mov    -0x28(%rbp),%ecx
  mov    -0x20(%rbp),%eax
  add    %eax,%ecx
  mov    -0x1c(%rbp),%eax
  add    %eax,%ecx
  mov    -0x8(%rbp),%rax
  add    $0x6,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  mov    %eax,-0x24(%rbp)
  mov    -0x24(%rbp),%eax
  add    %ecx,%eax
  add    $0x2,%eax
  shr    $0x2,%eax
  add    %edx,%eax
  add    $0x1,%eax
  shr    %eax
  mov    %eax,%edx
  mov    -0x18(%rbp),%rax
  add    $0x5,%rax
  mov    %dl,(%rax)
  mov    -0x18(%rbp),%rax
  add    $0x6,%rax
  movzbl (%rax),%eax
  movzbl %al,%edx
  mov    -0x10(%rbp),%rax
  add    $0x7,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  mov    %eax,-0x20(%rbp)
  mov    -0x20(%rbp),%ecx
  mov    -0x28(%rbp),%eax
  add    %eax,%ecx
  mov    -0x24(%rbp),%eax
  add    %eax,%ecx
  mov    -0x8(%rbp),%rax
  add    $0x7,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  mov    %eax,-0x1c(%rbp)
  mov    -0x1c(%rbp),%eax
  add    %ecx,%eax
  add    $0x2,%eax
  shr    $0x2,%eax
  add    %edx,%eax
  add    $0x1,%eax
  shr    %eax
  mov    %eax,%edx
  mov    -0x18(%rbp),%rax
  add    $0x6,%rax
  mov    %dl,(%rax)
  mov    -0x18(%rbp),%rax
  add    $0x7,%rax
  movzbl (%rax),%eax
  movzbl %al,%edx
  mov    -0x10(%rbp),%rax
  add    $0x8,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  mov    %eax,-0x28(%rbp)
  mov    -0x28(%rbp),%ecx
  mov    -0x20(%rbp),%eax
  add    %eax,%ecx
  mov    -0x1c(%rbp),%eax
  add    %eax,%ecx
  mov    -0x8(%rbp),%rax
  add    $0x8,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  mov    %eax,-0x24(%rbp)
  mov    -0x24(%rbp),%eax
  add    %ecx,%eax
  add    $0x2,%eax
  shr    $0x2,%eax
  add    %edx,%eax
  add    $0x1,%eax
  shr    %eax
  mov    %eax,%edx
  mov    -0x18(%rbp),%rax
  add    $0x7,%rax
  mov    %dl,(%rax)
  mov    -0x18(%rbp),%rax
  add    $0x8,%rax
  movzbl (%rax),%eax
  movzbl %al,%edx
  mov    -0x10(%rbp),%rax
  add    $0x9,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  mov    %eax,-0x20(%rbp)
  mov    -0x20(%rbp),%ecx
  mov    -0x28(%rbp),%eax
  add    %eax,%ecx
  mov    -0x24(%rbp),%eax
  add    %eax,%ecx
  mov    -0x8(%rbp),%rax
  add    $0x9,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  mov    %eax,-0x1c(%rbp)
  mov    -0x1c(%rbp),%eax
  add    %ecx,%eax
  add    $0x2,%eax
  shr    $0x2,%eax
  add    %edx,%eax
  add    $0x1,%eax
  shr    %eax
  mov    %eax,%edx
  mov    -0x18(%rbp),%rax
  add    $0x8,%rax
  mov    %dl,(%rax)
  mov    -0x18(%rbp),%rax
  add    $0x9,%rax
  movzbl (%rax),%eax
  movzbl %al,%edx
  mov    -0x10(%rbp),%rax
  add    $0xa,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  mov    %eax,-0x28(%rbp)
  mov    -0x28(%rbp),%ecx
  mov    -0x20(%rbp),%eax
  add    %eax,%ecx
  mov    -0x1c(%rbp),%eax
  add    %eax,%ecx
  mov    -0x8(%rbp),%rax
  add    $0xa,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  mov    %eax,-0x24(%rbp)
  mov    -0x24(%rbp),%eax
  add    %ecx,%eax
  add    $0x2,%eax
  shr    $0x2,%eax
  add    %edx,%eax
  add    $0x1,%eax
  shr    %eax
  mov    %eax,%edx
  mov    -0x18(%rbp),%rax
  add    $0x9,%rax
  mov    %dl,(%rax)
  mov    -0x18(%rbp),%rax
  add    $0xa,%rax
  movzbl (%rax),%eax
  movzbl %al,%edx
  mov    -0x10(%rbp),%rax
  add    $0xb,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  mov    %eax,-0x20(%rbp)
  mov    -0x20(%rbp),%ecx
  mov    -0x28(%rbp),%eax
  add    %eax,%ecx
  mov    -0x24(%rbp),%eax
  add    %eax,%ecx
  mov    -0x8(%rbp),%rax
  add    $0xb,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  mov    %eax,-0x1c(%rbp)
  mov    -0x1c(%rbp),%eax
  add    %ecx,%eax
  add    $0x2,%eax
  shr    $0x2,%eax
  add    %edx,%eax
  add    $0x1,%eax
  shr    %eax
  mov    %eax,%edx
  mov    -0x18(%rbp),%rax
  add    $0xa,%rax
  mov    %dl,(%rax)
  mov    -0x18(%rbp),%rax
  add    $0xb,%rax
  movzbl (%rax),%eax
  movzbl %al,%edx
  mov    -0x10(%rbp),%rax
  add    $0xc,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  mov    %eax,-0x28(%rbp)
  mov    -0x28(%rbp),%ecx
  mov    -0x20(%rbp),%eax
  add    %eax,%ecx
  mov    -0x1c(%rbp),%eax
  add    %eax,%ecx
  mov    -0x8(%rbp),%rax
  add    $0xc,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  mov    %eax,-0x24(%rbp)
  mov    -0x24(%rbp),%eax
  add    %ecx,%eax
  add    $0x2,%eax
  shr    $0x2,%eax
  add    %edx,%eax
  add    $0x1,%eax
  shr    %eax
  mov    %eax,%edx
  mov    -0x18(%rbp),%rax
  add    $0xb,%rax
  mov    %dl,(%rax)
  mov    -0x18(%rbp),%rax
  add    $0xc,%rax
  movzbl (%rax),%eax
  movzbl %al,%edx
  mov    -0x10(%rbp),%rax
  add    $0xd,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  mov    %eax,-0x20(%rbp)
  mov    -0x20(%rbp),%ecx
  mov    -0x28(%rbp),%eax
  add    %eax,%ecx
  mov    -0x24(%rbp),%eax
  add    %eax,%ecx
  mov    -0x8(%rbp),%rax
  add    $0xd,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  mov    %eax,-0x1c(%rbp)
  mov    -0x1c(%rbp),%eax
  add    %ecx,%eax
  add    $0x2,%eax
  shr    $0x2,%eax
  add    %edx,%eax
  add    $0x1,%eax
  shr    %eax
  mov    %eax,%edx
  mov    -0x18(%rbp),%rax
  add    $0xc,%rax
  mov    %dl,(%rax)
  mov    -0x18(%rbp),%rax
  add    $0xd,%rax
  movzbl (%rax),%eax
  movzbl %al,%edx
  mov    -0x10(%rbp),%rax
  add    $0xe,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  mov    %eax,-0x28(%rbp)
  mov    -0x28(%rbp),%ecx
  mov    -0x20(%rbp),%eax
  add    %eax,%ecx
  mov    -0x1c(%rbp),%eax
  add    %eax,%ecx
  mov    -0x8(%rbp),%rax
  add    $0xe,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  mov    %eax,-0x24(%rbp)
  mov    -0x24(%rbp),%eax
  add    %ecx,%eax
  add    $0x2,%eax
  shr    $0x2,%eax
  add    %edx,%eax
  add    $0x1,%eax
  shr    %eax
  mov    %eax,%edx
  mov    -0x18(%rbp),%rax
  add    $0xd,%rax
  mov    %dl,(%rax)
  mov    -0x18(%rbp),%rax
  add    $0xe,%rax
  movzbl (%rax),%eax
  movzbl %al,%edx
  mov    -0x10(%rbp),%rax
  add    $0xf,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  mov    %eax,-0x20(%rbp)
  mov    -0x20(%rbp),%ecx
  mov    -0x28(%rbp),%eax
  add    %eax,%ecx
  mov    -0x24(%rbp),%eax
  add    %eax,%ecx
  mov    -0x8(%rbp),%rax
  add    $0xf,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  mov    %eax,-0x1c(%rbp)
  mov    -0x1c(%rbp),%eax
  add    %ecx,%eax
  add    $0x2,%eax
  shr    $0x2,%eax
  add    %edx,%eax
  add    $0x1,%eax
  shr    %eax
  mov    %eax,%edx
  mov    -0x18(%rbp),%rax
  add    $0xe,%rax
  mov    %dl,(%rax)
  mov    -0x18(%rbp),%rax
  add    $0xf,%rax
  movzbl (%rax),%eax
  movzbl %al,%edx
  mov    -0x10(%rbp),%rax
  add    $0x10,%rax
  movzbl (%rax),%eax
  movzbl %al,%ecx
  mov    -0x20(%rbp),%eax
  add    %eax,%ecx
  mov    -0x1c(%rbp),%eax
  add    %eax,%ecx
  mov    -0x8(%rbp),%rax
  add    $0x10,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  add    %ecx,%eax
  add    $0x2,%eax
  shr    $0x2,%eax
  add    %edx,%eax
  add    $0x1,%eax
  shr    %eax
  mov    %eax,%edx
  mov    -0x18(%rbp),%rax
  add    $0xf,%rax
  mov    %dl,(%rax)
  mov    -0x48(%rbp),%eax
  cltq
  add    %rax,-0x10(%rbp)
  mov    -0x48(%rbp),%eax
  cltq
  add    %rax,-0x8(%rbp)
  mov    -0x48(%rbp),%eax
  cltq
  add    %rax,-0x18(%rbp)
  addl   $0x1,-0x2c(%rbp)
L5:
  mov    -0x2c(%rbp),%eax
  cmp    -0x4c(%rbp),%eax
  jl     L4
  nop
  nop
  pop    %rbp
  ret
```

assistant: ```c
void rec4a(unsigned char *s, unsigned char *d, int lx, int lx2, int h) {
  unsigned char *dp = d, *sp = s, *sp2 = s + lx;
  unsigned int s1, s2, s3, s4;
  int j;
  for (j = 0; j < h; j++) {
    s1 = sp[0];
    s3 = sp2[0];
    dp[0] = (dp[0] + ((unsigned int)(s1 + (s2 = sp[1]) + s3 + (s4 = sp2[1]) + 2) >> 2) + 1) >> 1;
    dp[1] = (dp[1] + ((unsigned int)(s2 + (s1 = sp[2]) + s4 + (s3 = sp2[2]) + 2) >> 2) + 1) >> 1;
    dp[2] = (dp[2] + ((unsigned int)(s1 + (s2 = sp[3]) + s3 + (s4 = sp2[3]) + 2) >> 2) + 1) >> 1;
    dp[3] = (dp[3] + ((unsigned int)(s2 + (s1 = sp[4]) + s4 + (s3 = sp2[4]) + 2) >> 2) + 1) >> 1;
    dp[4] = (dp[4] + ((unsigned int)(s1 + (s2 = sp[5]) + s3 + (s4 = sp2[5]) + 2) >> 2) + 1) >> 1;
    dp[5] = (dp[5] + ((unsigned int)(s2 + (s1 = sp[6]) + s4 + (s3 = sp2[6]) + 2) >> 2) + 1) >> 1;
    dp[6] = (dp[6] + ((unsigned int)(s1 + (s2 = sp[7]) + s3 + (s4 = sp2[7]) + 2) >> 2) + 1) >> 1;
    dp[7] = (dp[7] + ((unsigned int)(s2 + (s1 = sp[8]) + s4 + (s3 = sp2[8]) + 2) >> 2) + 1) >> 1;
    dp[8] = (dp[8] + ((unsigned int)(s1 + (s2 = sp[9]) + s3 + (s4 = sp2[9]) + 2) >> 2) + 1) >> 1;
    dp[9] = (dp[9] + ((unsigned int)(s2 + (s1 = sp[10]) + s4 + (s3 = sp2[10]) + 2) >> 2) + 1) >> 1;
    dp[10] = (dp[10] + ((unsigned int)(s1 + (s2 = sp[11]) + s3 + (s4 = sp2[11]) + 2) >> 2) + 1) >> 1;
    dp[11] = (dp[11] + ((unsigned int)(s2 + (s1 = sp[12]) + s4 + (s3 = sp2[12]) + 2) >> 2) + 1) >> 1;
    dp[12] = (dp[12] + ((unsigned int)(s1 + (s2 = sp[13]) + s3 + (s4 = sp2[13]) + 2) >> 2) + 1) >> 1;
    dp[13] = (dp[13] + ((unsigned int)(s2 + (s1 = sp[14]) + s4 + (s3 = sp2[14]) + 2) >> 2) + 1) >> 1;
    dp[14] = (dp[14] + ((unsigned int)(s1 + (s2 = sp[15]) + s3 + (s4 = sp2[15]) + 2) >> 2) + 1) >> 1;
    dp[15] = (dp[15] + ((unsigned int)(s2 + sp[16] + s4 + sp2[16] + 2) >> 2) + 1) >> 1;
    sp += lx2;
    sp2 += lx2;
    dp += lx2;
  }
}
```