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

```asm
<conv_de_bin>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  mov    %ecx,%r12d
  push   %rbp
  push   %rbx
  mov    %rdi,%rbx
  mov    %rsi,%rdi
  sub    $0x48,%rsp
  mov    %edx,0x38(%rsp)
  test   %edx,%edx
  js     L6
  movslq 0x38(%rsp),%rax
  xor    %esi,%esi
  lea    0x2(%rax,%rax,1),%rbp
  mov    %rax,0x18(%rsp)
  mov    %rbp,%rdx
  call   <memset@plt>
  mov    %rax,%rdi
  add    %rbp,%rdi
L51:
  mov    0x18(%rsp),%rax
  mov    0x38(%rsp),%r14d
  lea    0x4(%rbx),%rdx
  lea    0x2(%rbx),%r15
  mov    %rdx,0x10(%rsp)
  mov    %r12d,%edx
  lea    0x1(%rax),%rcx
  lea    0x2(%r14,%r14,1),%r11d
  mov    %r15,0x20(%rsp)
  lea    (%rcx,%rcx,1),%rbp
  sub    %r11d,%edx
  lea    (%rbx,%rbp,1),%rax
  lea    -0x2(%rbp),%rsi
  lea    -0x2(%rax),%r8
  lea    0x2(%rax),%r9
  mov    %r8,0x28(%rsp)
  lea    (%rax,%rbp,1),%r10
  lea    -0x4(%rax,%rbp,1),%r8
  mov    %r9,0x8(%rsp)
  lea    (%rax,%rsi,1),%r9
  test   %edx,%edx
  jle    L1
  lea    -0x2(%rbx,%rbp,2),%r12
  mov    %rdi,%r11
  shl    $0x2,%rcx
  lea    -0x1(%rdx),%r13d
  sub    %r12,%r11
  cmp    $0xe,%r11
  mov    %rdi,%r11
  seta   %r14b
  sub    %r15,%r11
  lea    0x2(%rbx,%rcx,1),%r15
  cmp    $0xc,%r11
  seta   %r11b
  and    %r14d,%r11d
  cmp    $0x2,%r13d
  seta   %r14b
  and    %r14d,%r11d
  mov    %rdi,%r14
  sub    %rax,%r14
  cmp    $0x10,%r14
  seta   %r14b
  and    %r14d,%r11d
  mov    %rdi,%r14
  sub    %r15,%r14
  cmp    $0xc,%r14
  seta   %r14b
  test   %r14b,%r11b
  je     L2
  mov    %rdi,%r11
  sub    0x10(%rsp),%r11
  cmp    $0xe,%r11
  jbe    L2
  cmp    $0x6,%r13d
  jbe    L8
  lea    0x2(%rbx,%rbp,1),%r14
  mov    %edx,%ebp
  lea    (%rbx,%rsi,1),%r13
  add    %rbx,%rcx
  shr    $0x3,%ebp
  add    %r13,%rsi
  xor    %r11d,%r11d
  shl    $0x4,%rbp
  nop
L40:
  movdqu 0x2(%rbx,%r11,1),%xmm3
  movdqu (%rbx,%r11,1),%xmm0
  movdqu 0x4(%rbx,%r11,1),%xmm4
  movdqu (%rax,%r11,1),%xmm1
  movdqu (%rax,%r11,1),%xmm6
  paddw  %xmm3,%xmm0
  movdqu 0x0(%r13,%r11,1),%xmm5
  paddw  %xmm4,%xmm0
  psllw  $0x3,%xmm1
  movdqu (%r14,%r11,1),%xmm7
  movdqu (%rsi,%r11,1),%xmm2
  paddw  %xmm5,%xmm0
  paddw  %xmm6,%xmm1
  movdqu (%r12,%r11,1),%xmm3
  movdqu (%rcx,%r11,1),%xmm4
  paddw  %xmm1,%xmm0
  paddw  %xmm7,%xmm0
  paddw  %xmm2,%xmm0
  paddw  %xmm3,%xmm0
  paddw  %xmm4,%xmm0
  movups %xmm0,(%rdi,%r11,1)
  add    $0x10,%r11
  cmp    %rbp,%r11
  jne    L40
  mov    %edx,%ecx
  and    $0xfffffff8,%ecx
  mov    %ecx,%esi
  lea    (%rsi,%rsi,1),%r11
  add    %r11,0x20(%rsp)
  add    %r11,0x10(%rsp)
  lea    (%rdi,%r11,1),%rbp
  lea    (%rbx,%r11,1),%r13
  add    %r11,%rax
  add    %r11,0x28(%rsp)
  add    %r11,%r8
  add    %r11,%r9
  add    %r11,%r10
  add    %r11,0x8(%rsp)
  mov    %edx,%r11d
  cmp    %ecx,%edx
  je     L104
  mov    %edx,%r14d
  sub    %ecx,%r14d
  lea    -0x1(%r14),%r11d
  mov    %r14d,0x3c(%rsp)
  cmp    $0x2,%r11d
  jbe    L88
L5:
  lea    (%rsi,%rsi,1),%r15
  movq   (%rbx,%rsi,2),%xmm1
  mov    0x18(%rsp),%r12
  movq   0x2(%rbx,%r15,1),%xmm0
  lea    (%r12,%rsi,1),%r11
  paddw  %xmm1,%xmm0
  movq   0x4(%rbx,%r15,1),%xmm1
  lea    (%r11,%r11,1),%r14
  add    %r11,%r12
  movq   0x2(%rbx,%r14,1),%xmm2
  mov    %r12,0x30(%rsp)
  add    %r12,%r12
  mov    0x30(%rsp),%r15
  paddw  %xmm1,%xmm0
  movq   (%rbx,%r11,2),%xmm1
  paddw  %xmm1,%xmm0
  movdqa %xmm2,%xmm1
  psllw  $0x3,%xmm1
  paddw  %xmm2,%xmm1
  paddw  %xmm1,%xmm0
  movq   0x4(%rbx,%r14,1),%xmm1
  paddw  %xmm1,%xmm0
  movq   (%rbx,%r15,2),%xmm1
  paddw  %xmm1,%xmm0
  movq   0x2(%rbx,%r12,1),%xmm1
  paddw  %xmm1,%xmm0
  movq   0x4(%rbx,%r12,1),%xmm1
  mov    0x3c(%rsp),%ebx
  paddw  %xmm1,%xmm0
  movq   %xmm0,(%rdi,%rsi,2)
  mov    %ebx,%esi
  and    $0xfffffffc,%esi
  mov    %esi,%r11d
  add    %esi,%ecx
  add    %r11,%r11
  add    %r11,0x20(%rsp)
  add    %r11,0x10(%rsp)
  add    %r11,%rbp
  add    %r11,%r13
  add    %r11,%rax
  add    %r11,0x28(%rsp)
  add    %r11,%r8
  add    %r11,%r9
  add    %r11,%r10
  add    %r11,0x8(%rsp)
  mov    %edx,%r11d
  cmp    %esi,%ebx
  je     L104
L88:
  mov    0x20(%rsp),%r15
  movswl 0x0(%r13),%esi
  mov    0x10(%rsp),%r14
  mov    0x28(%rsp),%r12
  movswl (%r15),%r11d
  mov    0x8(%rsp),%rbx
  add    %esi,%r11d
  movswl (%r14),%esi
  add    %r11d,%esi
  movswl (%r12),%r11d
  add    %r11d,%esi
  movswl (%rax),%r11d
  lea    (%r11,%r11,8),%r11d
  add    %esi,%r11d
  movswl (%rbx),%esi
  add    %r11d,%esi
  movswl (%r8),%r11d
  add    %esi,%r11d
  movswl (%r9),%esi
  add    %r11d,%esi
  movswl (%r10),%r11d
  add    %r11d,%esi
  mov    %edx,%r11d
  mov    %si,0x0(%rbp)
  lea    0x1(%rcx),%esi
  cmp    %esi,%edx
  jle    L104
  movswl 0x2(%r13),%esi
  movswl 0x2(%r15),%ebx
  add    $0x2,%ecx
  add    %esi,%ebx
  movswl 0x2(%r14),%esi
  add    %ebx,%esi
  movswl 0x2(%r12),%ebx
  add    %ebx,%esi
  movswl 0x2(%rax),%ebx
  lea    (%rbx,%rbx,8),%ebx
  add    %esi,%ebx
  mov    0x8(%rsp),%rsi
  movswl 0x2(%rsi),%esi
  add    %ebx,%esi
  movswl 0x2(%r8),%ebx
  add    %esi,%ebx
  movswl 0x2(%r9),%esi
  add    %ebx,%esi
  movswl 0x2(%r10),%ebx
  add    %ebx,%esi
  mov    %si,0x2(%rbp)
  cmp    %ecx,%edx
  jle    L104
  movswl 0x4(%r15),%ecx
  movswl 0x4(%r13),%edx
  movswl 0x4(%rax),%eax
  mov    0x8(%rsp),%rsi
  add    %ecx,%edx
  movswl 0x4(%r14),%ecx
  lea    (%rax,%rax,8),%eax
  add    %ecx,%edx
  movswl 0x4(%r12),%ecx
  add    %ecx,%edx
  add    %edx,%eax
  movswl 0x4(%rsi),%edx
  add    %edx,%eax
  movswl 0x4(%r8),%edx
  add    %edx,%eax
  movswl 0x4(%r9),%edx
  add    %edx,%eax
  movswl 0x4(%r10),%edx
  add    %edx,%eax
  mov    %ax,0x4(%rbp)
L104:
  lea    (%rdi,%r11,2),%rdi
L1:
  mov    0x38(%rsp),%eax
  test   %eax,%eax
  js     L38
  mov    0x18(%rsp),%rax
  add    $0x48,%rsp
  xor    %esi,%esi
  pop    %rbx
  pop    %rbp
  lea    0x2(%rax,%rax,1),%rdx
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    1050 <memset@plt>
  cs nopw 0x0(%rax,%rax,1)
L38:
  add    $0x48,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nop
L2:
  mov    %edx,%r11d
  xor    %ecx,%ecx
  nopl   (%rax)
L113:
  movswl 0x2(%rbx,%rcx,2),%esi
  movswl (%rbx,%rcx,2),%edx
  add    %esi,%edx
  movswl 0x4(%rbx,%rcx,2),%esi
  add    %esi,%edx
  movswl -0x2(%rax,%rcx,2),%esi
  add    %esi,%edx
  movswl (%rax,%rcx,2),%esi
  lea    (%rsi,%rsi,8),%esi
  add    %esi,%edx
  movswl 0x2(%rax,%rcx,2),%esi
  add    %esi,%edx
  movswl (%r8,%rcx,2),%esi
  add    %esi,%edx
  movswl (%r9,%rcx,2),%esi
  add    %esi,%edx
  movswl (%r10,%rcx,2),%esi
  add    %esi,%edx
  mov    %dx,(%rdi,%rcx,2)
  add    $0x1,%rcx
  cmp    %r11,%rcx
  jne    L113
  jmp    L104
  nopl   0x0(%rax,%rax,1)
L6:
  movslq %edx,%rax
  mov    %rax,0x18(%rsp)
  jmp    L51
L8:
  mov    %edx,0x3c(%rsp)
  mov    %rbx,%r13
  mov    %rdi,%rbp
  xor    %ecx,%ecx
  xor    %esi,%esi
  jmp    L5
```

assistant: ```c
void conv_de_bin(short int *src, short int *dst, int ncol, int npix) {
  short int *i0, *i1, *i2, *i3, *i4, *i5, *i6, *i7, *i8;
  int i, res;
  for (i = 0; i < ncol + 1; ++i) {
    *dst = 0;
    ++dst;
  }
  src += ncol + 1;
  i0 = src - ncol - 1;
  i1 = src - ncol;
  i2 = src - ncol + 1;
  i3 = src - 1;
  i4 = src;
  i5 = src + 1;
  i6 = src + ncol - 1;
  i7 = src + ncol;
  i8 = src + ncol + 1;
  npix -= 2 * (ncol + 1);
  for (i = 0; i < npix; ++i) {
    res = (*i0 + *i1 + *i2 + *i3 + *i4 * 9 + *i5 + *i6 + *i7 + *i8);
    *dst = res;
    dst++;
    i0++;
    i1++;
    i2++;
    i3++;
    i4++;
    i5++;
    i6++;
    i7++;
    i8++;
  }
  for (i = 0; i < ncol + 1; ++i) {
    *dst = 0;
    ++dst;
  }
}
```