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

```asm
<yuv422pto422>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rdi,%rcx
  movslq %edx,%rdi
  add    %rsi,%rdi
  lea    0x500(%rcx),%rbx
  lea    -0x20(%rdx,%rdx,1),%r12d
  movslq %r12d,%r12
  lea    0x100(%rcx),%r13
  mov    $0xffffffff,%edx
  mov    $0x0,%r8d
  add    $0x20,%r12
  jmp    L77
L112:
  add    $0x3a,%r10d
  add    $0x3a,%r11d
  jmp    L116
L130:
  mov    %r14b,-0x4(%rsi,%rax,4)
  mov    -0x4(%rbp,%rax,4),%r14d
  mov    %edx,%r9d
  cmp    $0x7f,%r14d
  jg     L145
  lea    -0x80(%r14),%r9d
  cmp    $0xffffff7f,%r14d
  cmovle %r8d,%r9d
L145:
  mov    %r9b,-0x3(%rsi,%rax,4)
  mov    0x4(%rcx,%r15,1),%r9d
  mov    %edx,%r14d
  cmp    $0xff,%r9d
  jg     L103
  test   %r9d,%r9d
  mov    %r9d,%r14d
  cmovs  %r8d,%r14d
L103:
  mov    %r14b,-0x2(%rsi,%rax,4)
  mov    -0x4(%rbx,%rax,4),%r14d
  mov    %edx,%r9d
  cmp    $0x7f,%r14d
  jg     L114
  lea    -0x80(%r14),%r9d
  cmp    $0xffffff7f,%r14d
  cmovle %r8d,%r9d
L114:
  mov    %r9b,-0x1(%rsi,%rax,4)
  movslq %r11d,%r9
  lea    0x0(,%r9,4),%r15
  mov    (%rcx,%r9,4),%r9d
  mov    %edx,%r14d
  cmp    $0xff,%r9d
  jg     L7
  test   %r9d,%r9d
  mov    %r9d,%r14d
  cmovs  %r8d,%r14d
L7:
  mov    %r14b,-0x4(%rdi,%rax,4)
  mov    0x1c(%rbp,%rax,4),%r14d
  mov    %edx,%r9d
  cmp    $0x7f,%r14d
  jg     L24
  lea    -0x80(%r14),%r9d
  cmp    $0xffffff7f,%r14d
  cmovle %r8d,%r9d
L24:
  mov    %r9b,-0x3(%rdi,%rax,4)
  mov    0x4(%rcx,%r15,1),%r9d
  mov    %edx,%r14d
  cmp    $0xff,%r9d
  jg     L108
  test   %r9d,%r9d
  mov    %r9d,%r14d
  cmovs  %r8d,%r14d
L108:
  mov    %r14b,-0x2(%rdi,%rax,4)
  mov    0x1c(%rbx,%rax,4),%r14d
  mov    %edx,%r9d
  cmp    $0x7f,%r14d
  jg     L115
  lea    -0x80(%r14),%r9d
  cmp    $0xffffff7f,%r14d
  cmovle %r8d,%r9d
L115:
  mov    %r9b,-0x1(%rdi,%rax,4)
  cmp    $0x8,%rax
  je     L107
  cmp    $0x4,%eax
  je     L112
  add    $0x2,%r10d
  add    $0x2,%r11d
L116:
  add    $0x1,%rax
L60:
  movslq %r10d,%r9
  lea    0x0(,%r9,4),%r15
  mov    (%rcx,%r9,4),%r9d
  mov    %edx,%r14d
  cmp    $0xff,%r9d
  jg     L130
  test   %r9d,%r9d
  mov    %r9d,%r14d
  cmovs  %r8d,%r14d
  jmp    L130
L107:
  add    $0x40,%rcx
  add    $0x20,%rbx
  add    %r12,%rsi
  add    %r12,%rdi
  cmp    %rcx,%r13
  je     L97
L77:
  lea    -0x100(%rbx),%rbp
  mov    $0x1,%eax
  mov    $0x8,%r11d
  mov    $0x0,%r10d
  jmp    L60
L97:
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

assistant: ```c
void yuv422pto422(int *out, unsigned char *pic, int width) {
  int j, k;
  unsigned char *pic0, *pic1;
  int *outy, *outu, *outv;
  int outy1 = 0;
  int outy2 = 8;
  int outu1 = 0;
  int outv1 = 0;
  pic0 = pic;
  pic1 = pic + width;
  outy = out;
  outu = out + 64 * 4;
  outv = out + 64 * 5;
  for (j = 0; j < 4; j++) {
    for (k = 0; k < 8; k++) {
      if (k == 4) {
        outy1 += 56;
        outy2 += 56;
      }
      *pic0++ = (unsigned char)(((outy[outy1]) > 0xFF) ? 0xff : (((outy[outy1]) < 0) ? 0 : (outy[outy1])));
      *pic0++ = (unsigned char)(((128 + outu[outu1]) > 0xFF) ? 0xff : (((128 + outu[outu1]) < 0) ? 0 : (128 + outu[outu1])));
      *pic0++ = (unsigned char)(((outy[outy1 + 1]) > 0xFF) ? 0xff : (((outy[outy1 + 1]) < 0) ? 0 : (outy[outy1 + 1])));
      *pic0++ = (unsigned char)(((128 + outv[outv1]) > 0xFF) ? 0xff : (((128 + outv[outv1]) < 0) ? 0 : (128 + outv[outv1])));
      *pic1++ = (unsigned char)(((outy[outy2]) > 0xFF) ? 0xff : (((outy[outy2]) < 0) ? 0 : (outy[outy2])));
      *pic1++ = (unsigned char)(((128 + outu[outu1 + 8]) > 0xFF) ? 0xff : (((128 + outu[outu1 + 8]) < 0) ? 0 : (128 + outu[outu1 + 8])));
      *pic1++ = (unsigned char)(((outy[outy2 + 1]) > 0xFF) ? 0xff : (((outy[outy2 + 1]) < 0) ? 0 : (outy[outy2 + 1])));
      *pic1++ = (unsigned char)(((128 + outv[outv1 + 8]) > 0xFF) ? 0xff : (((128 + outv[outv1 + 8]) < 0) ? 0 : (128 + outv[outv1 + 8])));
      outv1 += 1;
      outu1 += 1;
      outy1 += 2;
      outy2 += 2;
    }
    outy += 16;
    outu += 8;
    outv += 8;
    outv1 = 0;
    outu1 = 0;
    outy1 = 0;
    outy2 = 8;
    pic0 += 2 * (width - 16);
    pic1 += 2 * (width - 16);
  }
}
```