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

```asm
<mcu_bitblt>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x48(%rbp)
  mov    %rsi,-0x50(%rbp)
  mov    %edx,-0x54(%rbp)
  mov    %ecx,-0x58(%rbp)
  mov    %r8d,-0x5c(%rbp)
  mov    %r9d,-0x60(%rbp)
  mov    -0x60(%rbp),%eax
  sub    -0x58(%rbp),%eax
  mov    %eax,-0x24(%rbp)
  mov    0x10(%rbp),%eax
  sub    -0x5c(%rbp),%eax
  mov    %eax,-0x20(%rbp)
  mov    -0x5c(%rbp),%eax
  mov    %eax,-0x38(%rbp)
  jmp    L16
L34:
  mov    -0x38(%rbp),%eax
  sub    -0x5c(%rbp),%eax
  shl    $0x3,%eax
  mov    %eax,-0x1c(%rbp)
  mov    -0x1c(%rbp),%eax
  cltd
  idivl  -0x20(%rbp)
  mov    %eax,-0x18(%rbp)
  mov    -0x1c(%rbp),%eax
  cltd
  idivl  -0x20(%rbp)
  mov    %edx,-0x14(%rbp)
  mov    -0x58(%rbp),%eax
  mov    %eax,-0x3c(%rbp)
  jmp    L39
L87:
  mov    -0x3c(%rbp),%eax
  sub    -0x58(%rbp),%eax
  shl    $0x3,%eax
  mov    %eax,-0x1c(%rbp)
  mov    -0x1c(%rbp),%eax
  cltd
  idivl  -0x24(%rbp)
  mov    %eax,-0x10(%rbp)
  mov    -0x1c(%rbp),%eax
  cltd
  idivl  -0x24(%rbp)
  mov    %edx,-0xc(%rbp)
  cmpl   $0x6,-0x10(%rbp)
  jle    L7
  mov    -0x18(%rbp),%eax
  lea    0x0(,%rax,8),%edx
  mov    -0x10(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x34(%rbp)
  mov    -0x34(%rbp),%eax
  mov    %eax,-0x30(%rbp)
  cmpl   $0x6,-0x18(%rbp)
  jle    L68
  mov    -0x34(%rbp),%eax
  mov    %eax,-0x2c(%rbp)
  mov    -0x34(%rbp),%eax
  mov    %eax,-0x28(%rbp)
  jmp    L67
L68:
  mov    -0x18(%rbp),%eax
  add    $0x1,%eax
  lea    0x0(,%rax,8),%edx
  mov    -0x10(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x2c(%rbp)
  mov    -0x2c(%rbp),%eax
  mov    %eax,-0x28(%rbp)
  jmp    L67
L7:
  mov    -0x18(%rbp),%eax
  lea    0x0(,%rax,8),%edx
  mov    -0x10(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x34(%rbp)
  mov    -0x18(%rbp),%eax
  lea    0x0(,%rax,8),%edx
  mov    -0x10(%rbp),%eax
  add    $0x1,%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x30(%rbp)
  cmpl   $0x6,-0x18(%rbp)
  jle    L65
  mov    -0x34(%rbp),%eax
  mov    %eax,-0x2c(%rbp)
  mov    -0x30(%rbp),%eax
  mov    %eax,-0x28(%rbp)
  jmp    L67
L65:
  mov    -0x18(%rbp),%eax
  add    $0x1,%eax
  lea    0x0(,%rax,8),%edx
  mov    -0x10(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x2c(%rbp)
  mov    -0x18(%rbp),%eax
  add    $0x1,%eax
  lea    0x0(,%rax,8),%edx
  mov    -0x10(%rbp),%eax
  add    $0x1,%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x28(%rbp)
L67:
  mov    -0x24(%rbp),%eax
  sub    -0xc(%rbp),%eax
  imul   -0x34(%rbp),%eax
  mov    %eax,%edx
  mov    -0x30(%rbp),%eax
  imul   -0xc(%rbp),%eax
  add    %edx,%eax
  cltd
  idivl  -0x24(%rbp)
  mov    %eax,-0x8(%rbp)
  mov    -0x24(%rbp),%eax
  sub    -0xc(%rbp),%eax
  imul   -0x2c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x28(%rbp),%eax
  imul   -0xc(%rbp),%eax
  add    %edx,%eax
  cltd
  idivl  -0x24(%rbp)
  mov    %eax,-0x4(%rbp)
  mov    -0x20(%rbp),%eax
  sub    -0x14(%rbp),%eax
  imul   -0x8(%rbp),%eax
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  imul   -0x14(%rbp),%eax
  add    %eax,%edx
  mov    -0x38(%rbp),%eax
  imul   -0x54(%rbp),%eax
  mov    %eax,%ecx
  mov    -0x3c(%rbp),%eax
  add    %ecx,%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0x50(%rbp),%rax
  add    %rax,%rcx
  mov    %edx,%eax
  cltd
  idivl  -0x20(%rbp)
  mov    %eax,(%rcx)
  addl   $0x1,-0x3c(%rbp)
L39:
  mov    -0x3c(%rbp),%eax
  cmp    -0x60(%rbp),%eax
  jl     L87
  addl   $0x1,-0x38(%rbp)
L16:
  mov    -0x38(%rbp),%eax
  cmp    0x10(%rbp),%eax
  jl     L34
  nop
  nop
  pop    %rbp
  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;
    }
  }
}
```