user: 下面的汇编指令对应的C源代码是什么:

```asm
<MMF_ISP_VGAto1280_1024New>:
  endbr64
  mov    %rdx,%r10
  test   %rdx,%rdx
  je     L121
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %esi,%eax
  mov    %rcx,%rdx
  cmp    $0x1e0,%di
  setne  %sil
  cmp    $0x280,%ax
  setne  %cl
  mov    $0xffffffff,%eax
  mov    %esi,%ebx
  or     %cl,%bl
  mov    %bl,-0x6(%rsp)
  jne    L57
  mov    D48(%rip),%eax
  mov    %eax,-0x4(%rsp)
  mov    D16(%rip),%edi
  mov    %edi,-0x14(%rsp)
  mov    D46(%rip),%edi
  mov    %edi,-0x18(%rsp)
  mov    %rdx,%r14
  lea    0xa000(%rdx),%rdi
  mov    %rdi,-0x10(%rsp)
  mov    %bl,-0x5(%rsp)
  mov    %eax,-0x1c(%rsp)
  jmp    L154
L133:
  mov    %ebx,%eax
  mov    -0x18(%rsp),%edi
  sub    %edi,%eax
  add    $0x1,%edi
  mov    %edi,-0x18(%rsp)
  add    $0x10,%ebx
  mov    %ebx,-0x14(%rsp)
  movb   $0x1,-0x5(%rsp)
  movb   $0x1,-0x6(%rsp)
  jmp    L6
L140:
  sub    $0x1,%eax
  sar    %eax
  lea    (%rax,%rax,4),%eax
  shl    $0x7,%eax
  mov    %eax,%ebx
  add    $0x280,%eax
  jmp    L28
L208:
  lea    -0x1(%rdi),%eax
  sar    %eax
  movslq %eax,%rdx
  lea    (%rbx,%rdx,1),%rcx
  movzwl (%r10,%rcx,2),%ecx
  movzwl %cx,%r9d
  add    $0x1,%eax
  movslq %eax,%r11
  lea    (%rbx,%r11,1),%rax
  movzwl (%r10,%rax,2),%r8d
  movzwl %r8w,%esi
  mov    %r9d,%eax
  sar    $0xb,%eax
  mov    %esi,%r15d
  sar    $0xb,%r15d
  sar    $0x5,%r9d
  and    $0x3f,%r9d
  sar    $0x5,%esi
  and    $0x3f,%esi
  and    $0x1f,%ecx
  and    $0x1f,%r8d
  test   %r13d,%r13d
  jne    L106
L70:
  add    %r15d,%eax
  sar    %eax
  lea    (%rsi,%r9,1),%edx
  sar    %edx
  add    %r8d,%ecx
  sar    %ecx
L55:
  shl    $0xb,%eax
  shl    $0x5,%edx
  or     %edx,%eax
  or     %ecx,%eax
  mov    %ax,(%r14,%rdi,2)
  add    $0x1,%rdi
  cmp    $0x500,%rdi
  je     L137
L69:
  test   $0x1,%dil
  jne    L208
  mov    %edi,%eax
  sar    %eax
  cltq
  lea    (%rbx,%rax,1),%rdx
  movzwl (%r10,%rdx,2),%r8d
  movzwl %r8w,%esi
  mov    %esi,%r15d
  sar    $0xb,%r15d
  sar    $0x5,%esi
  and    $0x3f,%esi
  and    $0x1f,%r8d
  test   %r13d,%r13d
  je     L105
  add    -0x28(%rsp),%rax
  movzwl (%r10,%rax,2),%ecx
  movzwl %cx,%edx
  mov    %edx,%eax
  sar    $0xb,%eax
  add    %r15d,%eax
  sar    %eax
  sar    $0x5,%edx
  and    $0x3f,%edx
  add    %esi,%edx
  sar    %edx
  and    $0x1f,%ecx
  add    %r8d,%ecx
  sar    %ecx
  jmp    L55
L105:
  mov    %r8d,%ecx
  mov    %esi,%r9d
  mov    %r15d,%eax
  jmp    L70
L106:
  mov    -0x28(%rsp),%rbp
  add    %rbp,%rdx
  movzwl (%r10,%rdx,2),%r12d
  movzwl %r12w,%edx
  add    %rbp,%r11
  movzwl (%r10,%r11,2),%ebp
  movzwl %bp,%r11d
  add    %eax,%r15d
  mov    %edx,%eax
  sar    $0xb,%eax
  add    %r15d,%eax
  mov    %r11d,%r15d
  sar    $0xb,%r15d
  add    %r15d,%eax
  sar    $0x2,%eax
  sar    $0x5,%edx
  and    $0x3f,%edx
  add    %esi,%r9d
  add    %r9d,%edx
  sar    $0x5,%r11d
  and    $0x3f,%r11d
  add    %r11d,%edx
  sar    $0x2,%edx
  add    %r8d,%ecx
  and    $0x1f,%r12d
  add    %r12d,%ecx
  and    $0x1f,%ebp
  add    %ebp,%ecx
  sar    $0x2,%ecx
  jmp    L55
L137:
  addl   $0x1,-0x1c(%rsp)
  add    $0xa00,%r14
  cmp    -0x10(%rsp),%r14
  je     L146
L154:
  mov    -0x1c(%rsp),%ebx
  mov    %ebx,%eax
  sub    -0x18(%rsp),%eax
  cmp    %ebx,-0x14(%rsp)
  je     L133
L6:
  mov    %eax,%r13d
  and    $0x1,%r13d
  jne    L140
  sar    %eax
  lea    (%rax,%rax,4),%eax
  shl    $0x7,%eax
  mov    %eax,%ebx
L28:
  mov    $0x0,%edi
  movslq %ebx,%rbx
  cltq
  mov    %rax,-0x28(%rsp)
  jmp    L69
L146:
  cmpb   $0x0,-0x5(%rsp)
  je     L162
  mov    -0x18(%rsp),%eax
  mov    %eax,D33(%rip)
L162:
  cmpb   $0x0,-0x6(%rsp)
  je     L130
  mov    -0x14(%rsp),%eax
  mov    %eax,D33(%rip)
L130:
  mov    -0x4(%rsp),%ebx
  lea    0x10(%rbx),%eax
  cmp    $0x3f0,%ebx
  mov    $0x0,%edx
  cmove  %edx,%eax
  mov    %eax,D33(%rip)
  cmpl   $0x400,D33(%rip)
  je     L157
L94:
  mov    $0x1,%eax
  cmpl   $0x40,D33(%rip)
  je     L139
L57:
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L157:
  movl   $0x0,D33(%rip)
  jmp    L94
L139:
  movl   $0x0,D33(%rip)
  jmp    L57
L121:
  mov    $0xffffffff,%eax
  ret
```

assistant: ```c
int MMF_ISP_VGAto1280_1024New(unsigned short hei, unsigned short wid, unsigned short *rgb_buf, unsigned short *output_buf) {
  int x, y;
  int m_min, n_min, m_max, n_max;
  int R_max_max, G_max_max, B_max_max;
  int R_max_min, G_max_min, B_max_min;
  int R_min_max, G_min_max, B_min_max;
  int R_min_min, G_min_min, B_min_min;
  int piex_min_min;
  int piex_min_max;
  int piex_max_min;
  int piex_max_max;
  int R, G, B;
  int row_min, row_max;
  int y_temp;
  static int line_temp = 0;
  static int a = 0;
  static int u = 0;
  if (rgb_buf == 0)
    return -1;
  if ((hei != 480) || (wid != 640)) {
    return -1;
  }
  for (y = line_temp; y < line_temp + 16; y++) {
    if (y == a) {
      y_temp = y - u;
      u++;
      a = a + 16;
    } else {
      y_temp = y - u;
    }
    if ((y_temp & 0x0001) == 0) {
      m_min = (y_temp >> 1);
      m_max = m_min;
      row_min = m_min * wid;
      row_max = row_min;
    } else {
      m_min = ((y_temp - 1) >> 1);
      m_max = m_min + 1;
      row_min = m_min * wid;
      row_max = row_min + wid;
    }
    for (x = 0; x < 1280; x++) {
      if ((x & 0x0001) == 0) {
        n_min = (x >> 1);
        piex_min_min = (int)(*(rgb_buf + row_min + n_min));
        piex_max_min = (int)(*(rgb_buf + row_max + n_min));
        R_min_min = (int)(piex_min_min >> 11);
        R_min_max = R_min_min;
        R_max_min = (int)(piex_max_min >> 11);
        R_max_max = R_max_min;
        G_min_min = (int)((piex_min_min & 0x07ff) >> 5);
        G_min_max = G_min_min;
        G_max_min = (int)((piex_max_min & 0x07ff) >> 5);
        G_max_max = G_max_min;
        B_min_min = (int)(piex_min_min & 0x001f);
        B_min_max = B_min_min;
        B_max_min = (int)(piex_max_min & 0x001f);
        B_max_max = B_max_min;
      } else {
        n_min = ((x - 1) >> 1);
        n_max = n_min + 1;
        piex_min_min = (int)(*(rgb_buf + row_min + n_min));
        piex_min_max = (int)(*(rgb_buf + row_min + n_max));
        piex_max_min = (int)(*(rgb_buf + row_max + n_min));
        piex_max_max = (int)(*(rgb_buf + row_max + n_max));
        R_min_min = (int)(piex_min_min >> 11);
        R_min_max = (int)(piex_min_max >> 11);
        R_max_min = (int)(piex_max_min >> 11);
        R_max_max = (int)(piex_max_max >> 11);
        G_min_min = (int)((piex_min_min & 0x07ff) >> 5);
        G_min_max = (int)((piex_min_max & 0x07ff) >> 5);
        G_max_min = (int)((piex_max_min & 0x07ff) >> 5);
        G_max_max = (int)((piex_max_max & 0x07ff) >> 5);
        B_min_min = (int)(piex_min_min & 0x001f);
        B_min_max = (int)(piex_min_max & 0x001f);
        B_max_min = (int)(piex_max_min & 0x001f);
        B_max_max = (int)(piex_max_max & 0x001f);
      }
      if ((y_temp & 0x0001) == 0) {
        R = (R_min_min + R_min_max) >> 1;
        G = (G_min_min + G_min_max) >> 1;
        B = (B_min_min + B_min_max) >> 1;
      } else if ((x & 0x0001) == 0) {
        R = (R_min_min + R_max_min) >> 1;
        G = (G_min_min + G_max_min) >> 1;
        B = (B_min_min + B_max_min) >> 1;
      } else {
        R = (R_min_min + R_min_max + R_max_min + R_max_max) >> 2;
        G = (G_min_min + G_min_max + G_max_min + G_max_max) >> 2;
        B = (B_min_min + B_min_max + B_max_min + B_max_max) >> 2;
      }
      output_buf[(y - line_temp) * 1280 + x] = ((unsigned short)R << 11) | (((unsigned short)G << 5) & 0x07ff) | ((unsigned short)B & 0x001f);
    }
  }
  line_temp = line_temp + 16;
  if (line_temp == 1024) {
    line_temp = 0;
  }
  if (a == 1024) {
    a = 0;
  }
  if (u == 64) {
    u = 0;
  }
  return 1;
}
```