user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<mcu_bitblt>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rdi,%r14
  mov    %rsi,-0x10(%rsp)
  mov    %edx,-0x20(%rsp)
  mov    %ecx,-0x1c(%rsp)
  mov    %r9d,-0x18(%rsp)
  mov    0x38(%rsp),%eax
  mov    %r9d,%edi
  sub    %ecx,%edi
  mov    %eax,%r15d
  sub    %r8d,%r15d
  cmp    %r8d,%eax
  jle    L76
  imul   %r8d,%edx
  mov    %edx,-0x24(%rsp)
  mov    %r15d,%eax
  shl    $0x3,%eax
  mov    %eax,-0x14(%rsp)
  mov    %edi,%eax
  shl    $0x3,%eax
  mov    %eax,-0x30(%rsp)
  movl   $0x0,-0x28(%rsp)
  movslq %ecx,%rax
  mov    %rax,-0x8(%rsp)
  jmp    L74
L112:
  lea    0x0(%r13,%rax,1),%edx
  movslq %edx,%rdx
  mov    (%r14,%rdx,4),%ecx
  lea    0x1(%rax),%esi
  lea    0x0(%r13,%rsi,1),%edx
  movslq %edx,%rdx
  mov    (%r14,%rdx,4),%edx
  cmp    $0x6,%r12d
  jg     L2
  mov    -0x2c(%rsp),%r10d
  add    %r10d,%eax
  cltq
  mov    (%r14,%rax,4),%ebx
  add    %r10d,%esi
  movslq %esi,%rsi
  mov    (%r14,%rsi,4),%r10d
L109:
  mov    %edi,%esi
  sub    %r9d,%esi
  imul   %esi,%ecx
  imul   %r9d,%edx
  lea    (%rcx,%rdx,1),%eax
  cltd
  idiv   %edi
  imul   -0x34(%rsp),%eax
  mov    %eax,%ecx
  imul   %ebx,%esi
  imul   %r9d,%r10d
  lea    (%rsi,%r10,1),%eax
  cltd
  idiv   %edi
  imul   %ebp,%eax
  add    %ecx,%eax
  cltd
  idiv   %r15d
  mov    %eax,(%r11)
  add    $0x8,%r8d
  add    $0x4,%r11
  cmp    -0x30(%rsp),%r8d
  je     L51
L41:
  mov    %r8d,%eax
  cltd
  idiv   %edi
  mov    %edx,%r9d
  cmp    $0x6,%eax
  jle    L112
  lea    0x0(%r13,%rax,1),%edx
  movslq %edx,%rdx
  mov    (%r14,%rdx,4),%ecx
  cmp    $0x6,%r12d
  jg     L64
  add    -0x2c(%rsp),%eax
  cltq
  mov    (%r14,%rax,4),%ebx
  mov    %ebx,%r10d
  mov    %ecx,%edx
  jmp    L109
L64:
  mov    %ecx,%r10d
  mov    %ecx,%ebx
  mov    %ecx,%edx
  jmp    L109
L2:
  mov    %edx,%r10d
  mov    %ecx,%ebx
  jmp    L109
L51:
  addl   $0x8,-0x28(%rsp)
  mov    -0x28(%rsp),%eax
  mov    -0x20(%rsp),%ecx
  add    %ecx,-0x24(%rsp)
  cmp    -0x14(%rsp),%eax
  je     L76
L74:
  mov    -0x28(%rsp),%eax
  cltd
  idiv   %r15d
  mov    %edx,%ebp
  mov    %eax,%r12d
  mov    -0x1c(%rsp),%ebx
  cmp    %ebx,-0x18(%rsp)
  jle    L51
  lea    0x0(,%rax,8),%r13d
  lea    0x8(%r13),%eax
  mov    %eax,-0x2c(%rsp)
  movslq -0x24(%rsp),%rax
  add    -0x8(%rsp),%rax
  mov    -0x10(%rsp),%rbx
  lea    (%rbx,%rax,4),%r11
  mov    $0x0,%r8d
  mov    %r15d,%eax
  sub    %edx,%eax
  mov    %eax,-0x34(%rsp)
  jmp    L41
L76:
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

assistant: ```c
void mcu_bitblt(int *src, int *dest, int width, int x0, int y0, int x1, int y1) {
  int w, h, t;
  int x, y, x2, y2;
  int dx, dy;
  int c1, c2, c3, c4;
  int vx1, vx2;
  w = x1 - x0;
  h = y1 - y0;
  for (y = y0; y < y1; y++) {
    t = (y - y0) * 8;
    y2 = t / h;
    dy = t % h;
    for (x = x0; x < x1; x++) {
      t = (x - x0) * 8;
      x2 = t / w;
      dx = t % w;
      if (x2 + 1 > 7) {
        c1 = src[(((y2)*8) + (x2))];
        c2 = c1;
        if (y2 + 1 > 7) {
          c3 = c1;
          c4 = c1;
        } else {
          c3 = src[(((y2 + 1) * 8) + (x2))];
          c4 = c3;
        }
      } else {
        c1 = src[(((y2)*8) + (x2))];
        c2 = src[(((y2)*8) + (x2 + 1))];
        if (y2 + 1 > 7) {
          c3 = c1;
          c4 = c2;
        } else {
          c3 = src[(((y2 + 1) * 8) + (x2))];
          c4 = src[(((y2 + 1) * 8) + (x2 + 1))];
        }
      }
      vx1 = (c1 * (w - dx) + c2 * dx) / w;
      vx2 = (c3 * (w - dx) + c4 * dx) / w;
      dest[(y * width) + x] = (vx1 * (h - dy) + vx2 * dy) / h;
    }
  }
}
```