user: Translate the below assembly code into C programming language:

```asm
<BGBBTJ_JPG_TransIDCT_Vert2>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x48(%rbp)
  mov    %rsi,-0x50(%rbp)
  mov    %edx,-0x54(%rbp)
  mov    -0x48(%rbp),%rax
  mov    (%rax),%eax
  imul   $0x5b,%eax,%eax
  mov    %eax,-0x38(%rbp)
  mov    -0x48(%rbp),%rax
  sub    $0xffffffffffffff80,%rax
  mov    (%rax),%eax
  imul   $0x5b,%eax,%eax
  mov    %eax,-0x34(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0x40,%rax
  mov    (%rax),%eax
  imul   $0x76,%eax,%eax
  mov    %eax,-0x30(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0x40,%rax
  mov    (%rax),%eax
  imul   $0x31,%eax,%eax
  mov    %eax,-0x2c(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0xc0,%rax
  mov    (%rax),%eax
  imul   $0x76,%eax,%eax
  mov    %eax,-0x28(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0xc0,%rax
  mov    (%rax),%eax
  imul   $0x31,%eax,%eax
  mov    %eax,-0x24(%rbp)
  mov    -0x38(%rbp),%edx
  mov    -0x30(%rbp),%eax
  add    %eax,%edx
  mov    -0x34(%rbp),%eax
  add    %eax,%edx
  mov    -0x24(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x20(%rbp)
  mov    -0x38(%rbp),%edx
  mov    -0x2c(%rbp),%eax
  add    %edx,%eax
  sub    -0x34(%rbp),%eax
  sub    -0x28(%rbp),%eax
  mov    %eax,-0x1c(%rbp)
  mov    -0x38(%rbp),%eax
  sub    -0x2c(%rbp),%eax
  sub    -0x34(%rbp),%eax
  mov    %eax,%edx
  mov    -0x28(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x18(%rbp)
  mov    -0x38(%rbp),%eax
  sub    -0x30(%rbp),%eax
  mov    %eax,%edx
  mov    -0x34(%rbp),%eax
  add    %edx,%eax
  sub    -0x24(%rbp),%eax
  mov    %eax,-0x14(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0x20,%rax
  mov    (%rax),%eax
  imul   $0x7e,%eax,%edx
  mov    -0x48(%rbp),%rax
  add    $0x60,%rax
  mov    (%rax),%eax
  imul   $0x6a,%eax,%eax
  add    %eax,%edx
  mov    -0x48(%rbp),%rax
  add    $0xa0,%rax
  mov    (%rax),%eax
  imul   $0x47,%eax,%eax
  lea    (%rdx,%rax,1),%ecx
  mov    -0x48(%rbp),%rax
  add    $0xe0,%rax
  mov    (%rax),%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  lea    0x0(,%rax,4),%edx
  add    %edx,%eax
  add    %ecx,%eax
  mov    %eax,-0x10(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0x20,%rax
  mov    (%rax),%eax
  imul   $0x6a,%eax,%edx
  mov    -0x48(%rbp),%rax
  add    $0x60,%rax
  mov    (%rax),%eax
  imul   $0xffffffe7,%eax,%eax
  lea    (%rdx,%rax,1),%ecx
  mov    -0x48(%rbp),%rax
  add    $0xa0,%rax
  mov    (%rax),%edx
  mov    %edx,%eax
  shl    $0x6,%edx
  sub    %edx,%eax
  add    %eax,%eax
  lea    (%rcx,%rax,1),%edx
  mov    -0x48(%rbp),%rax
  add    $0xe0,%rax
  mov    (%rax),%eax
  imul   $0xffffffb9,%eax,%eax
  add    %edx,%eax
  mov    %eax,-0xc(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0x20,%rax
  mov    (%rax),%eax
  imul   $0x47,%eax,%ecx
  mov    -0x48(%rbp),%rax
  add    $0x60,%rax
  mov    (%rax),%edx
  mov    %edx,%eax
  shl    $0x6,%edx
  sub    %edx,%eax
  add    %eax,%eax
  add    %eax,%ecx
  mov    -0x48(%rbp),%rax
  add    $0xa0,%rax
  mov    (%rax),%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  lea    0x0(,%rax,4),%edx
  add    %edx,%eax
  lea    (%rcx,%rax,1),%edx
  mov    -0x48(%rbp),%rax
  add    $0xe0,%rax
  mov    (%rax),%eax
  imul   $0x6a,%eax,%eax
  add    %edx,%eax
  mov    %eax,-0x8(%rbp)
  mov    -0x48(%rbp),%rax
  add    $0x20,%rax
  mov    (%rax),%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  lea    0x0(,%rax,4),%edx
  add    %eax,%edx
  mov    -0x48(%rbp),%rax
  add    $0x60,%rax
  mov    (%rax),%eax
  imul   $0xffffffb9,%eax,%eax
  add    %eax,%edx
  mov    -0x48(%rbp),%rax
  add    $0xa0,%rax
  mov    (%rax),%eax
  imul   $0x6a,%eax,%eax
  lea    (%rdx,%rax,1),%ecx
  mov    -0x48(%rbp),%rax
  add    $0xe0,%rax
  mov    (%rax),%edx
  mov    %edx,%eax
  shl    $0x6,%edx
  sub    %edx,%eax
  add    %eax,%eax
  add    %ecx,%eax
  mov    %eax,-0x4(%rbp)
  mov    -0x20(%rbp),%edx
  mov    -0x10(%rbp),%eax
  add    %edx,%eax
  sar    $0x10,%eax
  mov    %eax,%edx
  mov    -0x54(%rbp),%eax
  add    %eax,%edx
  mov    -0x50(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x1c(%rbp),%edx
  mov    -0xc(%rbp),%eax
  add    %edx,%eax
  sar    $0x10,%eax
  mov    %eax,%ecx
  mov    -0x50(%rbp),%rax
  add    $0x20,%rax
  mov    -0x54(%rbp),%edx
  add    %ecx,%edx
  mov    %edx,(%rax)
  mov    -0x18(%rbp),%edx
  mov    -0x8(%rbp),%eax
  add    %edx,%eax
  sar    $0x10,%eax
  mov    %eax,%ecx
  mov    -0x50(%rbp),%rax
  add    $0x40,%rax
  mov    -0x54(%rbp),%edx
  add    %ecx,%edx
  mov    %edx,(%rax)
  mov    -0x14(%rbp),%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  sar    $0x10,%eax
  mov    %eax,%ecx
  mov    -0x50(%rbp),%rax
  add    $0x60,%rax
  mov    -0x54(%rbp),%edx
  add    %ecx,%edx
  mov    %edx,(%rax)
  mov    -0x14(%rbp),%eax
  sub    -0x4(%rbp),%eax
  sar    $0x10,%eax
  mov    %eax,%ecx
  mov    -0x50(%rbp),%rax
  sub    $0xffffffffffffff80,%rax
  mov    -0x54(%rbp),%edx
  add    %ecx,%edx
  mov    %edx,(%rax)
  mov    -0x18(%rbp),%eax
  sub    -0x8(%rbp),%eax
  sar    $0x10,%eax
  mov    %eax,%ecx
  mov    -0x50(%rbp),%rax
  add    $0xa0,%rax
  mov    -0x54(%rbp),%edx
  add    %ecx,%edx
  mov    %edx,(%rax)
  mov    -0x1c(%rbp),%eax
  sub    -0xc(%rbp),%eax
  sar    $0x10,%eax
  mov    %eax,%ecx
  mov    -0x50(%rbp),%rax
  add    $0xc0,%rax
  mov    -0x54(%rbp),%edx
  add    %ecx,%edx
  mov    %edx,(%rax)
  mov    -0x20(%rbp),%eax
  sub    -0x10(%rbp),%eax
  sar    $0x10,%eax
  mov    %eax,%ecx
  mov    -0x50(%rbp),%rax
  add    $0xe0,%rax
  mov    -0x54(%rbp),%edx
  add    %ecx,%edx
  mov    %edx,(%rax)
  nop
  pop    %rbp
  ret
```

assistant: ```c
void BGBBTJ_JPG_TransIDCT_Vert2(int *iblk, int *oblk, int dcbias) {
  int a, b, c, d, e, f;
  int i, j, k, l;
  int m, n, o, p;
  a = iblk[0] * 91;
  b = iblk[32] * 91;
  c = iblk[16] * 118;
  d = iblk[16] * 49;
  e = iblk[48] * 118;
  f = iblk[48] * 49;
  i = a + c + b + f;
  j = a + d - b - e;
  k = a - d - b + e;
  l = a - c + b - f;
  m = iblk[8] * 126 + iblk[24] * 106 + iblk[40] * 71 + iblk[56] * 25;
  n = iblk[8] * 106 - iblk[24] * 25 - iblk[40] * 126 - iblk[56] * 71;
  o = iblk[8] * 71 - iblk[24] * 126 + iblk[40] * 25 + iblk[56] * 106;
  p = iblk[8] * 25 - iblk[24] * 71 + iblk[40] * 106 - iblk[56] * 126;
  oblk[0] = ((i + m) >> 16) + dcbias;
  oblk[8] = ((j + n) >> 16) + dcbias;
  oblk[16] = ((k + o) >> 16) + dcbias;
  oblk[24] = ((l + p) >> 16) + dcbias;
  oblk[32] = ((l - p) >> 16) + dcbias;
  oblk[40] = ((k - o) >> 16) + dcbias;
  oblk[48] = ((j - n) >> 16) + dcbias;
  oblk[56] = ((i - m) >> 16) + dcbias;
}
```