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

```asm
<resize_imatrix>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %esi,-0x2c(%rbp)
  mov    %edx,-0x30(%rbp)
  mov    %ecx,-0x34(%rbp)
  mov    %r8d,-0x38(%rbp)
  mov    -0x2c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
  mov    -0x2c(%rbp),%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  sub    -0x10(%rbp),%rax
  sar    $0x2,%rax
  mov    %eax,-0x1c(%rbp)
  mov    -0x2c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x34(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  mov    %rax,-0x18(%rbp)
  mov    -0x30(%rbp),%eax
  sub    -0x2c(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    -0x38(%rbp),%eax
  sub    -0x34(%rbp),%eax
  add    $0x1,%eax
  imul   %edx,%eax
  cltq
  shl    $0x2,%eax
  mov    %eax,%edx
  mov    -0x18(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <realloc@plt>
  mov    %rax,-0x18(%rbp)
  mov    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <assert@plt>
  mov    -0x30(%rbp),%eax
  mov    %eax,-0x20(%rbp)
  jmp    L31
L37:
  mov    -0x20(%rbp),%eax
  sub    -0x2c(%rbp),%eax
  imul   -0x1c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x8(%rbp)
  mov    -0x20(%rbp),%eax
  sub    -0x2c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x38(%rbp),%eax
  sub    -0x34(%rbp),%eax
  add    $0x1,%eax
  imul   %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x10(%rbp)
  mov    -0x1c(%rbp),%eax
  cltq
  shl    $0x2,%eax
  mov    %eax,%edx
  mov    -0x8(%rbp),%rcx
  mov    -0x10(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memmove@plt>
  subl   $0x1,-0x20(%rbp)
L31:
  mov    -0x20(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jg     L37
  mov    -0x2c(%rbp),%eax
  mov    %eax,-0x20(%rbp)
  jmp    L24
L16:
  mov    -0x34(%rbp),%eax
  cltq
  shl    $0x2,%rax
  neg    %rax
  mov    %rax,%rcx
  mov    -0x20(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    -0x18(%rbp),%rdx
  add    %rcx,%rdx
  mov    %rdx,(%rax)
  mov    -0x38(%rbp),%eax
  sub    -0x34(%rbp),%eax
  cltq
  add    $0x1,%rax
  shl    $0x2,%rax
  add    %rax,-0x18(%rbp)
  addl   $0x1,-0x20(%rbp)
L24:
  mov    -0x20(%rbp),%eax
  cmp    -0x30(%rbp),%eax
  jle    L16
  mov    -0x28(%rbp),%rax
  leave
  ret
```

assistant: ```c
int **resize_imatrix(int **m, int minx, int maxx, int miny, int maxy) {
  int i, isize;
  int *p, *p1, *p2;
  p1 = m[minx];
  p2 = m[minx + 1];
  isize = (int)(p2 - p1);
  p = (m + minx)[0] + miny;
  p = (int *)realloc(p, (maxx - minx + 1) * (maxy - miny + 1) * sizeof(int));
  assert(p);
  for (i = maxx; i > minx; i--) {
    p2 = p + (i - minx) * isize;
    p1 = p + (i - minx) * (maxy - miny + 1);
    memmove(p1, p2, isize * sizeof(int));
  }
  for (i = minx; i <= maxx; i++) {
    m[i] = p - miny;
    p += (maxy - miny + 1);
  }
  return m;
}
```