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

```asm
<DrawFromRGB565>:
  endbr64
  test   %ecx,%ecx
  jle    L26
  push   %r14
  mov    %edx,%r11d
  xor    %r10d,%r10d
  xor    %r9d,%r9d
  push   %r13
  mov    %r8d,%r13d
  lea    -0x1(%rdx),%r8d
  push   %r12
  shr    $0x2,%r8d
  mov    %ecx,%r12d
  push   %rbp
  shl    $0x2,%r8
  mov    %rsi,%rbp
  push   %rbx
  mov    %rdi,%rbx
  xor    %edi,%edi
  lea    0x10(%rbx),%r14
  nopl   0x0(%rax,%rax,1)
L3:
  test   %r11d,%r11d
  jle    L5
  movslq %r10d,%rax
  movslq %edi,%rcx
  lea    0x0(%rbp,%rax,2),%rdx
  lea    0x0(,%rdi,4),%eax
  add    %r8,%rcx
  cltq
  lea    (%r14,%rcx,4),%rsi
  add    %rbx,%rax
  nopw   0x0(%rax,%rax,1)
L9:
  movzbl 0x1(%rdx),%ecx
  add    $0x10,%rax
  add    $0x8,%rdx
  and    $0xfffffff8,%ecx
  mov    %cl,-0xe(%rax)
  movzwl -0x8(%rdx),%ecx
  sar    $0x3,%ecx
  and    $0xfffffffc,%ecx
  mov    %cl,-0xf(%rax)
  movzbl -0x8(%rdx),%ecx
  shl    $0x3,%ecx
  mov    %cl,-0x10(%rax)
  movzbl -0x5(%rdx),%ecx
  and    $0xfffffff8,%ecx
  mov    %cl,-0xa(%rax)
  movzwl -0x6(%rdx),%ecx
  sar    $0x3,%ecx
  and    $0xfffffffc,%ecx
  mov    %cl,-0xb(%rax)
  movzbl -0x6(%rdx),%ecx
  shl    $0x3,%ecx
  mov    %cl,-0xc(%rax)
  movzbl -0x3(%rdx),%ecx
  and    $0xfffffff8,%ecx
  mov    %cl,-0x6(%rax)
  movzwl -0x4(%rdx),%ecx
  sar    $0x3,%ecx
  and    $0xfffffffc,%ecx
  mov    %cl,-0x7(%rax)
  movzbl -0x4(%rdx),%ecx
  shl    $0x3,%ecx
  mov    %cl,-0x8(%rax)
  movzbl -0x1(%rdx),%ecx
  and    $0xfffffff8,%ecx
  mov    %cl,-0x2(%rax)
  movzwl -0x2(%rdx),%ecx
  sar    $0x3,%ecx
  and    $0xfffffffc,%ecx
  mov    %cl,-0x3(%rax)
  movzbl -0x2(%rdx),%ecx
  shl    $0x3,%ecx
  mov    %cl,-0x4(%rax)
  cmp    %rax,%rsi
  jne    L9
L5:
  add    $0x1,%r9d
  add    %r13d,%edi
  add    %r11d,%r10d
  cmp    %r9d,%r12d
  jne    L3
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
L26:
  ret
```

assistant: ```c
void DrawFromRGB565(unsigned char *displayFrame, unsigned char *videoFrame, int videoWidth, int videoHeight, int dFrameWidth, int dFrameHeight) {
  int x, y;
  int lineLeng;
  unsigned short *videptrTemp;
  unsigned short *videoptr = videoFrame;
  int temp;
  lineLeng = dFrameWidth * 4;
  for (y = 0; y < videoHeight; y++) {
    for (x = 0; x < videoWidth;) {
      videptrTemp = videoptr + videoWidth * y + x;
      temp = y * lineLeng + x * 4;
      displayFrame[temp + 2] = (unsigned char)((*videptrTemp & 0xF800) >> 8);
      displayFrame[temp + 1] = (unsigned char)((*videptrTemp & 0x07E0) >> 3);
      displayFrame[temp + 0] = (unsigned char)((*videptrTemp & 0x001F) << 3);
      videptrTemp++;
      temp += 4;
      displayFrame[temp + 2] = (unsigned char)((*videptrTemp & 0xF800) >> 8);
      displayFrame[temp + 1] = (unsigned char)((*videptrTemp & 0x07E0) >> 3);
      displayFrame[temp + 0] = (unsigned char)((*videptrTemp & 0x001F) << 3);
      videptrTemp++;
      temp += 4;
      displayFrame[temp + 2] = (unsigned char)((*videptrTemp & 0xF800) >> 8);
      displayFrame[temp + 1] = (unsigned char)((*videptrTemp & 0x07E0) >> 3);
      displayFrame[temp + 0] = (unsigned char)((*videptrTemp & 0x001F) << 3);
      videptrTemp++;
      temp += 4;
      displayFrame[temp + 2] = (unsigned char)((*videptrTemp & 0xF800) >> 8);
      displayFrame[temp + 1] = (unsigned char)((*videptrTemp & 0x07E0) >> 3);
      displayFrame[temp + 0] = (unsigned char)((*videptrTemp & 0x001F) << 3);
      x += 4;
    }
  }
}
```