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

```asm
<conv3x3x3>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x90,%rsp
  mov    %rdi,-0xe8(%rbp)
  mov    %rsi,-0xf0(%rbp)
  mov    %rdx,-0xf8(%rbp)
  mov    %ecx,-0xfc(%rbp)
  mov    %r8d,-0x100(%rbp)
  mov    %r9d,-0x104(%rbp)
  movl   $0x0,-0xe0(%rbp)
  jmp    L44
L46:
  mov    -0xf0(%rbp),%rax
  movw   $0x0,(%rax)
  addq   $0x2,-0xf0(%rbp)
  addl   $0x1,-0xe0(%rbp)
L44:
  mov    -0x104(%rbp),%edx
  mov    -0x100(%rbp),%eax
  add    %edx,%eax
  cmp    %eax,-0xe0(%rbp)
  jle    L46
  mov    -0x104(%rbp),%edx
  mov    -0x100(%rbp),%eax
  add    %edx,%eax
  cltq
  add    $0x1,%rax
  add    %rax,%rax
  add    %rax,-0xe8(%rbp)
  mov    -0x104(%rbp),%eax
  cltq
  add    %rax,%rax
  neg    %rax
  mov    %rax,%rdx
  mov    -0x100(%rbp),%eax
  cltq
  lea    (%rax,%rax,1),%rcx
  mov    %rdx,%rax
  sub    %rcx,%rax
  lea    -0x2(%rax),%rdx
  mov    -0xe8(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0xd8(%rbp)
  mov    -0x104(%rbp),%eax
  cltq
  add    %rax,%rax
  neg    %rax
  mov    %rax,%rdx
  mov    -0x100(%rbp),%eax
  cltq
  add    %rax,%rax
  sub    %rax,%rdx
  mov    -0xe8(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0xd0(%rbp)
  mov    -0x104(%rbp),%eax
  cltq
  add    %rax,%rax
  neg    %rax
  mov    %rax,%rdx
  mov    -0x100(%rbp),%eax
  cltq
  lea    (%rax,%rax,1),%rcx
  mov    %rdx,%rax
  sub    %rcx,%rax
  lea    0x2(%rax),%rdx
  mov    -0xe8(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0xc8(%rbp)
  mov    -0x104(%rbp),%eax
  cltq
  add    %rax,%rax
  mov    $0xfffffffffffffffe,%rdx
  sub    %rax,%rdx
  mov    -0xe8(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0xc0(%rbp)
  mov    -0x104(%rbp),%eax
  cltq
  add    %rax,%rax
  neg    %rax
  mov    %rax,%rdx
  mov    -0xe8(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0xb8(%rbp)
  mov    -0x104(%rbp),%eax
  movslq %eax,%rdx
  mov    $0x1,%eax
  sub    %rdx,%rax
  lea    (%rax,%rax,1),%rdx
  mov    -0xe8(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0xb0(%rbp)
  mov    -0x100(%rbp),%eax
  cltq
  mov    -0x104(%rbp),%edx
  movslq %edx,%rdx
  sub    %rdx,%rax
  add    %rax,%rax
  lea    -0x2(%rax),%rdx
  mov    -0xe8(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0xa8(%rbp)
  mov    -0x100(%rbp),%eax
  cltq
  mov    -0x104(%rbp),%edx
  movslq %edx,%rdx
  sub    %rdx,%rax
  lea    (%rax,%rax,1),%rdx
  mov    -0xe8(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0xa0(%rbp)
  mov    -0x100(%rbp),%eax
  cltq
  mov    -0x104(%rbp),%edx
  movslq %edx,%rdx
  sub    %rdx,%rax
  add    $0x1,%rax
  lea    (%rax,%rax,1),%rdx
  mov    -0xe8(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x98(%rbp)
  mov    -0x100(%rbp),%eax
  cltq
  add    %rax,%rax
  mov    $0xfffffffffffffffe,%rdx
  sub    %rax,%rdx
  mov    -0xe8(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x90(%rbp)
  mov    -0x100(%rbp),%eax
  cltq
  add    %rax,%rax
  neg    %rax
  mov    %rax,%rdx
  mov    -0xe8(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x88(%rbp)
  mov    -0x100(%rbp),%eax
  movslq %eax,%rdx
  mov    $0x1,%eax
  sub    %rdx,%rax
  lea    (%rax,%rax,1),%rdx
  mov    -0xe8(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x80(%rbp)
  mov    -0xe8(%rbp),%rax
  sub    $0x2,%rax
  mov    %rax,-0x78(%rbp)
  mov    -0xe8(%rbp),%rax
  mov    %rax,-0x70(%rbp)
  mov    -0xe8(%rbp),%rax
  add    $0x2,%rax
  mov    %rax,-0x68(%rbp)
  mov    -0x100(%rbp),%eax
  cltq
  add    %rax,%rax
  lea    -0x2(%rax),%rdx
  mov    -0xe8(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x60(%rbp)
  mov    -0x100(%rbp),%eax
  cltq
  lea    (%rax,%rax,1),%rdx
  mov    -0xe8(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x58(%rbp)
  mov    -0x100(%rbp),%eax
  cltq
  add    $0x1,%rax
  lea    (%rax,%rax,1),%rdx
  mov    -0xe8(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x50(%rbp)
  mov    -0x104(%rbp),%eax
  cltq
  mov    -0x100(%rbp),%edx
  movslq %edx,%rdx
  sub    %rdx,%rax
  add    %rax,%rax
  lea    -0x2(%rax),%rdx
  mov    -0xe8(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x48(%rbp)
  mov    -0x104(%rbp),%eax
  cltq
  mov    -0x100(%rbp),%edx
  movslq %edx,%rdx
  sub    %rdx,%rax
  lea    (%rax,%rax,1),%rdx
  mov    -0xe8(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x40(%rbp)
  mov    -0x104(%rbp),%eax
  cltq
  mov    -0x100(%rbp),%edx
  movslq %edx,%rdx
  sub    %rdx,%rax
  add    $0x1,%rax
  lea    (%rax,%rax,1),%rdx
  mov    -0xe8(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x38(%rbp)
  mov    -0x104(%rbp),%eax
  cltq
  add    %rax,%rax
  lea    -0x2(%rax),%rdx
  mov    -0xe8(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x30(%rbp)
  mov    -0x104(%rbp),%eax
  cltq
  lea    (%rax,%rax,1),%rdx
  mov    -0xe8(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x28(%rbp)
  mov    -0x104(%rbp),%eax
  cltq
  add    $0x1,%rax
  lea    (%rax,%rax,1),%rdx
  mov    -0xe8(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x20(%rbp)
  mov    -0x104(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x100(%rbp),%eax
  cltq
  add    %rdx,%rax
  add    %rax,%rax
  lea    -0x2(%rax),%rdx
  mov    -0xe8(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x18(%rbp)
  mov    -0x104(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x100(%rbp),%eax
  cltq
  add    %rdx,%rax
  lea    (%rax,%rax,1),%rdx
  mov    -0xe8(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x10(%rbp)
  mov    -0x104(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x100(%rbp),%eax
  cltq
  add    %rdx,%rax
  add    $0x1,%rax
  lea    (%rax,%rax,1),%rdx
  mov    -0xe8(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x8(%rbp)
  mov    -0x104(%rbp),%edx
  mov    -0x100(%rbp),%eax
  add    %edx,%eax
  add    $0x1,%eax
  add    %eax,%eax
  sub    %eax,0x10(%rbp)
  movl   $0x0,-0xe0(%rbp)
  jmp    L25
L71:
  mov    -0xd8(%rbp),%rax
  movzwl (%rax),%eax
  movswl %ax,%edx
  mov    -0xf8(%rbp),%rax
  mov    (%rax),%eax
  mov    %edx,%ecx
  imul   %eax,%ecx
  mov    -0xd0(%rbp),%rax
  movzwl (%rax),%eax
  movswl %ax,%edx
  mov    -0xf8(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%eax
  imul   %edx,%eax
  add    %eax,%ecx
  mov    -0xc8(%rbp),%rax
  movzwl (%rax),%eax
  movswl %ax,%edx
  mov    -0xf8(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%eax
  imul   %edx,%eax
  add    %eax,%ecx
  mov    -0xc0(%rbp),%rax
  movzwl (%rax),%eax
  movswl %ax,%edx
  mov    -0xf8(%rbp),%rax
  add    $0xc,%rax
  mov    (%rax),%eax
  imul   %edx,%eax
  add    %eax,%ecx
  mov    -0xb8(%rbp),%rax
  movzwl (%rax),%eax
  movswl %ax,%edx
  mov    -0xf8(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%eax
  imul   %edx,%eax
  add    %eax,%ecx
  mov    -0xb0(%rbp),%rax
  movzwl (%rax),%eax
  movswl %ax,%edx
  mov    -0xf8(%rbp),%rax
  add    $0x14,%rax
  mov    (%rax),%eax
  imul   %edx,%eax
  add    %eax,%ecx
  mov    -0xa8(%rbp),%rax
  movzwl (%rax),%eax
  movswl %ax,%edx
  mov    -0xf8(%rbp),%rax
  add    $0x18,%rax
  mov    (%rax),%eax
  imul   %edx,%eax
  add    %eax,%ecx
  mov    -0xa0(%rbp),%rax
  movzwl (%rax),%eax
  movswl %ax,%edx
  mov    -0xf8(%rbp),%rax
  add    $0x1c,%rax
  mov    (%rax),%eax
  imul   %edx,%eax
  add    %eax,%ecx
  mov    -0x98(%rbp),%rax
  movzwl (%rax),%eax
  movswl %ax,%edx
  mov    -0xf8(%rbp),%rax
  add    $0x20,%rax
  mov    (%rax),%eax
  imul   %edx,%eax
  add    %eax,%ecx
  mov    -0x90(%rbp),%rax
  movzwl (%rax),%eax
  movswl %ax,%edx
  mov    -0xf8(%rbp),%rax
  add    $0x24,%rax
  mov    (%rax),%eax
  imul   %edx,%eax
  add    %eax,%ecx
  mov    -0x88(%rbp),%rax
  movzwl (%rax),%eax
  movswl %ax,%edx
  mov    -0xf8(%rbp),%rax
  add    $0x28,%rax
  mov    (%rax),%eax
  imul   %edx,%eax
  add    %eax,%ecx
  mov    -0x80(%rbp),%rax
  movzwl (%rax),%eax
  movswl %ax,%edx
  mov    -0xf8(%rbp),%rax
  add    $0x2c,%rax
  mov    (%rax),%eax
  imul   %edx,%eax
  add    %eax,%ecx
  mov    -0x78(%rbp),%rax
  movzwl (%rax),%eax
  movswl %ax,%edx
  mov    -0xf8(%rbp),%rax
  add    $0x30,%rax
  mov    (%rax),%eax
  imul   %edx,%eax
  add    %eax,%ecx
  mov    -0x70(%rbp),%rax
  movzwl (%rax),%eax
  movswl %ax,%edx
  mov    -0xf8(%rbp),%rax
  add    $0x34,%rax
  mov    (%rax),%eax
  imul   %edx,%eax
  add    %eax,%ecx
  mov    -0x68(%rbp),%rax
  movzwl (%rax),%eax
  movswl %ax,%edx
  mov    -0xf8(%rbp),%rax
  add    $0x38,%rax
  mov    (%rax),%eax
  imul   %edx,%eax
  add    %eax,%ecx
  mov    -0x60(%rbp),%rax
  movzwl (%rax),%eax
  movswl %ax,%edx
  mov    -0xf8(%rbp),%rax
  add    $0x3c,%rax
  mov    (%rax),%eax
  imul   %edx,%eax
  add    %eax,%ecx
  mov    -0x58(%rbp),%rax
  movzwl (%rax),%eax
  movswl %ax,%edx
  mov    -0xf8(%rbp),%rax
  add    $0x40,%rax
  mov    (%rax),%eax
  imul   %edx,%eax
  add    %eax,%ecx
  mov    -0x50(%rbp),%rax
  movzwl (%rax),%eax
  movswl %ax,%edx
  mov    -0xf8(%rbp),%rax
  add    $0x44,%rax
  mov    (%rax),%eax
  imul   %edx,%eax
  add    %eax,%ecx
  mov    -0x48(%rbp),%rax
  movzwl (%rax),%eax
  movswl %ax,%edx
  mov    -0xf8(%rbp),%rax
  add    $0x48,%rax
  mov    (%rax),%eax
  imul   %edx,%eax
  add    %eax,%ecx
  mov    -0x40(%rbp),%rax
  movzwl (%rax),%eax
  movswl %ax,%edx
  mov    -0xf8(%rbp),%rax
  add    $0x4c,%rax
  mov    (%rax),%eax
  imul   %edx,%eax
  add    %eax,%ecx
  mov    -0x38(%rbp),%rax
  movzwl (%rax),%eax
  movswl %ax,%edx
  mov    -0xf8(%rbp),%rax
  add    $0x50,%rax
  mov    (%rax),%eax
  imul   %edx,%eax
  add    %eax,%ecx
  mov    -0x30(%rbp),%rax
  movzwl (%rax),%eax
  movswl %ax,%edx
  mov    -0xf8(%rbp),%rax
  add    $0x54,%rax
  mov    (%rax),%eax
  imul   %edx,%eax
  add    %eax,%ecx
  mov    -0x28(%rbp),%rax
  movzwl (%rax),%eax
  movswl %ax,%edx
  mov    -0xf8(%rbp),%rax
  add    $0x58,%rax
  mov    (%rax),%eax
  imul   %edx,%eax
  add    %eax,%ecx
  mov    -0x20(%rbp),%rax
  movzwl (%rax),%eax
  movswl %ax,%edx
  mov    -0xf8(%rbp),%rax
  add    $0x5c,%rax
  mov    (%rax),%eax
  imul   %edx,%eax
  add    %eax,%ecx
  mov    -0x18(%rbp),%rax
  movzwl (%rax),%eax
  movswl %ax,%edx
  mov    -0xf8(%rbp),%rax
  add    $0x60,%rax
  mov    (%rax),%eax
  imul   %edx,%eax
  add    %eax,%ecx
  mov    -0x10(%rbp),%rax
  movzwl (%rax),%eax
  movswl %ax,%edx
  mov    -0xf8(%rbp),%rax
  add    $0x64,%rax
  mov    (%rax),%eax
  imul   %edx,%eax
  add    %eax,%ecx
  mov    -0x8(%rbp),%rax
  movzwl (%rax),%eax
  movswl %ax,%edx
  mov    -0xf8(%rbp),%rax
  add    $0x68,%rax
  mov    (%rax),%eax
  imul   %edx,%eax
  add    %ecx,%eax
  cltd
  idivl  -0xfc(%rbp)
  mov    %eax,-0xdc(%rbp)
  cmpl   $0xfff,-0xdc(%rbp)
  jle    L30
  mov    -0xf0(%rbp),%rax
  movw   $0xfff,(%rax)
  jmp    L56
L30:
  mov    -0xdc(%rbp),%eax
  mov    %eax,%edx
  mov    -0xf0(%rbp),%rax
  mov    %dx,(%rax)
L56:
  addq   $0x2,-0xf0(%rbp)
  addq   $0x2,-0xd8(%rbp)
  addq   $0x2,-0xd0(%rbp)
  addq   $0x2,-0xc8(%rbp)
  addq   $0x2,-0xc0(%rbp)
  addq   $0x2,-0xb8(%rbp)
  addq   $0x2,-0xb0(%rbp)
  addq   $0x2,-0xa8(%rbp)
  addq   $0x2,-0xa0(%rbp)
  addq   $0x2,-0x98(%rbp)
  addq   $0x2,-0x90(%rbp)
  addq   $0x2,-0x88(%rbp)
  addq   $0x2,-0x80(%rbp)
  addq   $0x2,-0x78(%rbp)
  addq   $0x2,-0x70(%rbp)
  addq   $0x2,-0x68(%rbp)
  addq   $0x2,-0x60(%rbp)
  addq   $0x2,-0x58(%rbp)
  addq   $0x2,-0x50(%rbp)
  addq   $0x2,-0x48(%rbp)
  addq   $0x2,-0x40(%rbp)
  addq   $0x2,-0x38(%rbp)
  addq   $0x2,-0x30(%rbp)
  addq   $0x2,-0x28(%rbp)
  addq   $0x2,-0x20(%rbp)
  addq   $0x2,-0x18(%rbp)
  addq   $0x2,-0x10(%rbp)
  addq   $0x2,-0x8(%rbp)
  addl   $0x1,-0xe0(%rbp)
L25:
  mov    -0xe0(%rbp),%eax
  cmp    0x10(%rbp),%eax
  jl     L71
  movl   $0x0,-0xe0(%rbp)
  jmp    L21
L10:
  mov    -0xf0(%rbp),%rax
  movw   $0x0,(%rax)
  addq   $0x2,-0xf0(%rbp)
  addl   $0x1,-0xe0(%rbp)
L21:
  mov    -0x104(%rbp),%edx
  mov    -0x100(%rbp),%eax
  add    %edx,%eax
  cmp    %eax,-0xe0(%rbp)
  jle    L10
  nop
  nop
  leave
  ret
```

assistant: ```c
void conv3x3x3(short int *src, short int *dst, int *conv, int norm, int ncol, int npix, int nvol) {
  short int *i00, *i01, *i02, *i03, *i04, *i05, *i06, *i07, *i08;
  short int *i09, *i10, *i11, *i12, *i13, *i14, *i15, *i16, *i17;
  short int *i18, *i19, *i20, *i21, *i22, *i23, *i24, *i25, *i26;
  int i, res;
  for (i = 0; i < npix + ncol + 1; ++i) {
    *dst = 0;
    ++dst;
  }
  src += npix + ncol + 1;
  i00 = src - npix - ncol - 1;
  i01 = src - npix - ncol;
  i02 = src - npix - ncol + 1;
  i03 = src - npix - 1;
  i04 = src - npix;
  i05 = src - npix + 1;
  i06 = src - npix + ncol - 1;
  i07 = src - npix + ncol;
  i08 = src - npix + ncol + 1;
  i09 = src - ncol - 1;
  i10 = src - ncol;
  i11 = src - ncol + 1;
  i12 = src - 1;
  i13 = src;
  i14 = src + 1;
  i15 = src + ncol - 1;
  i16 = src + ncol;
  i17 = src + ncol + 1;
  i18 = src + npix - ncol - 1;
  i19 = src + npix - ncol;
  i20 = src + npix - ncol + 1;
  i21 = src + npix - 1;
  i22 = src + npix;
  i23 = src + npix + 1;
  i24 = src + npix + ncol - 1;
  i25 = src + npix + ncol;
  i26 = src + npix + ncol + 1;
  nvol -= 2 * (npix + ncol + 1);
  for (i = 0; i < nvol; ++i) {
    res = (*i00 * conv[0] + *i01 * conv[1] + *i02 * conv[2] + *i03 * conv[3] + *i04 * conv[4] + *i05 * conv[5] + *i06 * conv[6] + *i07 * conv[7] + *i08 * conv[8] + *i09 * conv[9] + *i10 * conv[10] + *i11 * conv[11] + *i12 * conv[12] + *i13 * conv[13] + *i14 * conv[14] + *i15 * conv[15] + *i16 * conv[16] + *i17 * conv[17] + *i18 * conv[18] + *i19 * conv[19] + *i20 * conv[20] + *i21 * conv[21] + *i22 * conv[22] + *i23 * conv[23] + *i24 * conv[24] + *i25 * conv[25] + *i26 * conv[26]) / norm;
    if (res > 4096 - 1)
      *dst = 4096 - 1;
    else
      *dst = res;
    dst++;
    i00++;
    i01++;
    i02++;
    i03++;
    i04++;
    i05++;
    i06++;
    i07++;
    i08++;
    i09++;
    i10++;
    i11++;
    i12++;
    i13++;
    i14++;
    i15++;
    i16++;
    i17++;
    i18++;
    i19++;
    i20++;
    i21++;
    i22++;
    i23++;
    i24++;
    i25++;
    i26++;
  }
  for (i = 0; i < npix + ncol + 1; ++i) {
    *dst = 0;
    ++dst;
  }
}
```