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

```asm
<todegree>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x38,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %rsi,-0x30(%rbp)
  mov    %edx,-0x34(%rbp)
  mov    %ecx,-0x38(%rbp)
  mov    %r8d,-0x3c(%rbp)
  mov    -0x34(%rbp),%eax
  cltq
  shl    $0x3,%rax
  mov    %rax,%rdi
  call   <malloc@plt>
  mov    %rax,-0x18(%rbp)
  movl   $0x0,-0x20(%rbp)
  jmp    L129
L64:
  mov    -0x34(%rbp),%eax
  cltq
  shl    $0x2,%rax
  mov    -0x20(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x18(%rbp),%rdx
  lea    (%rcx,%rdx,1),%rbx
  mov    %rax,%rdi
  call   <malloc@plt>
  mov    %rax,(%rbx)
  addl   $0x1,-0x20(%rbp)
L129:
  mov    -0x20(%rbp),%eax
  cmp    -0x34(%rbp),%eax
  jl     L64
  movl   $0x0,-0x20(%rbp)
  jmp    L101
L25:
  movl   $0x0,-0x1c(%rbp)
  jmp    L18
L31:
  mov    -0x20(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x1c(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  mov    -0x20(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x18(%rbp),%rdx
  add    %rcx,%rdx
  mov    (%rdx),%rcx
  mov    -0x1c(%rbp),%edx
  movslq %edx,%rdx
  shl    $0x2,%rdx
  add    %rcx,%rdx
  mov    (%rax),%eax
  mov    %eax,(%rdx)
  addl   $0x1,-0x1c(%rbp)
L18:
  mov    -0x1c(%rbp),%eax
  cmp    -0x34(%rbp),%eax
  jl     L31
  addl   $0x1,-0x20(%rbp)
L101:
  mov    -0x20(%rbp),%eax
  cmp    -0x34(%rbp),%eax
  jl     L25
  mov    -0x34(%rbp),%ecx
  mov    -0x18(%rbp),%rdx
  mov    -0x18(%rbp),%rsi
  mov    -0x18(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <multy@plt>
  movl   $0x0,-0x20(%rbp)
  jmp    L15
L127:
  movl   $0x0,-0x1c(%rbp)
  jmp    L112
L63:
  mov    -0x20(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x1c(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  mov    -0x20(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x30(%rbp),%rdx
  add    %rcx,%rdx
  mov    (%rdx),%rcx
  mov    -0x1c(%rbp),%edx
  movslq %edx,%rdx
  shl    $0x2,%rdx
  add    %rcx,%rdx
  mov    (%rax),%eax
  mov    %eax,(%rdx)
  addl   $0x1,-0x1c(%rbp)
L112:
  mov    -0x1c(%rbp),%eax
  cmp    -0x34(%rbp),%eax
  jl     L63
  addl   $0x1,-0x20(%rbp)
L15:
  mov    -0x20(%rbp),%eax
  cmp    -0x34(%rbp),%eax
  jl     L127
  movl   $0x1,-0x20(%rbp)
  jmp    L119
L4:
  mov    -0x3c(%rbp),%edi
  mov    -0x34(%rbp),%ecx
  mov    -0x30(%rbp),%rdx
  mov    -0x30(%rbp),%rsi
  mov    -0x18(%rbp),%rax
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <block_mult_ed@plt>
  addl   $0x1,-0x20(%rbp)
L119:
  mov    -0x20(%rbp),%eax
  cmp    -0x38(%rbp),%eax
  jle    L4
  movl   $0x0,-0x20(%rbp)
  jmp    L26
L8:
  mov    -0x20(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <free@plt>
  addl   $0x1,-0x20(%rbp)
L26:
  mov    -0x20(%rbp),%eax
  cmp    -0x34(%rbp),%eax
  jl     L8
  mov    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

assistant: ```c
int todegree(int **input, int **out, int size, int degree, int param) {
  int i, j;
  int **temp = (int **)malloc(size * sizeof(int *));
  for (i = 0; i < size; i++)
    temp[i] = (int *)malloc(size * sizeof(int));
  for (i = 0; i < size; i++)
    for (j = 0; j < size; j++)
      temp[i][j] = input[i][j];
  multy(temp, temp, temp, size);
  for (i = 0; i < size; i++)
    for (j = 0; j < size; j++)
      out[i][j] = temp[i][j];
  for (i = 1; i <= degree; i++)
    block_mult_ed(temp, out, out, size, param);
  for (i = 0; i < size; i++)
    free(temp[i]);
  free(temp);
  return 0;
}
```