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

```asm
<yuv444pto422>:
  endbr64
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rsi,%rcx
  movslq %edx,%rsi
  add    %rcx,%rsi
  lea    0x500(%rdi),%r10
  lea    -0x10(%rdx,%rdx,1),%ebx
  movslq %ebx,%rbx
  lea    0x600(%rdi),%rbp
  mov    $0xffffffff,%edx
  mov    $0x0,%r8d
  add    $0x10,%rbx
  jmp    L113
L14:
  mov    %r12b,(%rcx,%rax,1)
  mov    (%r11,%rax,2),%r12d
  mov    %edx,%r9d
  cmp    $0x7f,%r12d
  jg     L99
  lea    -0x80(%r12),%r9d
  cmp    $0xffffff7f,%r12d
  cmovle %r8d,%r9d
L99:
  mov    %r9b,0x1(%rcx,%rax,1)
  mov    0x4(%rdi,%rax,2),%r9d
  mov    %edx,%r12d
  cmp    $0xff,%r9d
  jg     L3
  test   %r9d,%r9d
  mov    %r9d,%r12d
  cmovs  %r8d,%r12d
L3:
  mov    %r12b,0x2(%rcx,%rax,1)
  mov    (%r10,%rax,2),%r12d
  mov    %edx,%r9d
  cmp    $0x7f,%r12d
  jg     L12
  lea    -0x80(%r12),%r9d
  cmp    $0xffffff7f,%r12d
  cmovle %r8d,%r9d
L12:
  mov    %r9b,0x3(%rcx,%rax,1)
  mov    0x20(%rdi,%rax,2),%r9d
  mov    %edx,%r12d
  cmp    $0xff,%r9d
  jg     L47
  test   %r9d,%r9d
  mov    %r9d,%r12d
  cmovs  %r8d,%r12d
L47:
  mov    %r12b,(%rsi,%rax,1)
  mov    0x20(%r11,%rax,2),%r12d
  mov    %edx,%r9d
  cmp    $0x7f,%r12d
  jg     L115
  lea    -0x80(%r12),%r9d
  cmp    $0xffffff7f,%r12d
  cmovle %r8d,%r9d
L115:
  mov    %r9b,0x1(%rsi,%rax,1)
  mov    0x24(%rdi,%rax,2),%r9d
  mov    %edx,%r12d
  cmp    $0xff,%r9d
  jg     L18
  test   %r9d,%r9d
  mov    %r9d,%r12d
  cmovs  %r8d,%r12d
L18:
  mov    %r12b,0x2(%rsi,%rax,1)
  mov    0x20(%r10,%rax,2),%r12d
  mov    %edx,%r9d
  cmp    $0x7f,%r12d
  jg     L114
  lea    -0x80(%r12),%r9d
  cmp    $0xffffff7f,%r12d
  cmovle %r8d,%r9d
L114:
  mov    %r9b,0x3(%rsi,%rax,1)
  add    $0x4,%rax
  cmp    $0x10,%rax
  je     L37
L10:
  mov    (%rdi,%rax,2),%r9d
  mov    %edx,%r12d
  cmp    $0xff,%r9d
  jg     L14
  test   %r9d,%r9d
  mov    %r9d,%r12d
  cmovs  %r8d,%r12d
  jmp    L14
L37:
  add    $0x40,%r10
  add    %rbx,%rcx
  add    %rbx,%rsi
  cmp    %r10,%rbp
  je     L54
L113:
  lea    -0x100(%r10),%r11
  lea    -0x500(%r10),%rdi
  mov    $0x0,%eax
  jmp    L10
L54:
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
```

assistant: ```c
void yuv444pto422(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 < 4; k++) {
      *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 += 2;
      outu1 += 2;
      outy1 += 2;
      outy2 += 2;
    }
    outy += 16;
    outu += 16;
    outv += 16;
    outv1 = 0;
    outu1 = 0;
    outy1 = 0;
    outy2 = 8;
    pic0 += 2 * (width - 8);
    pic1 += 2 * (width - 8);
  }
}
```